输入中文日期输出对应的数字格式的日期
2014-08-29 12:45
429 查看
案例:编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期
比如:二零一二年十二月月二十一日要转换为2012-12-21。(处理“十”
的问题:1.*月十日;2.*月十三日;3.*月二十三日;4.*月三十日;)
四中情况对“十”的不同翻译。1→10;2→1;3→不翻译;4→0【年部分不
可能出现’十’,都出现在了月与日部分。】
测试数据:二零一二年十二月二十一日(2012年12月21日)、二零零九年七
月九日、二零一零年十月二十四日、二零一零年十月二十日
分析:可以考虑用字典,给出键,输出对应值
难点在对十的处理
情况 处理
一个数 10
两个数 在前 1
两个数 在后 0
三个数 在中间(一定) 不翻译
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 日期格式转换
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请输入日期");
string dates = Console.ReadLine().Trim();
StringBuilder date = new StringBuilder();
date = GetDateFormat(dates);//具体的格式转化封装成了方法
Console.WriteLine(date);
Console.ReadKey();
Console.Clear();
}
}
/// <summary>
/// 方法:字典,再调用格式转换
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
private static StringBuilder GetDateFormat(string date)
{
//声明字典,存入日期相关的键值
Dictionary<char, char> dic = new Dictionary<char, char>();
//给出字符串,放入可能出现的各个键和值,十特殊处理
string txt = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";
//分割txt得到各个键值,分别存入字典
string[] keyValue = txt.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
//遍历数组,分别存入对应的键值对
for (int i = 0; i < keyValue.Length; i++)
{
if (!dic.ContainsKey(keyValue[i][0]))
{
dic.Add(keyValue[i][0], keyValue[i][1]);
}
}
//调用方法,返回数字格式的日期
return GetDigitDate(dic,date);
}
/// <summary>
/// 方法:格式转换
/// </summary>
/// <param name="dic"></param>
/// <param name="date"></param>
/// <returns></returns>
private static StringBuilder GetDigitDate(Dictionary<char, char> dic, string date)
{
//字符串转为字符数组
char[] chs = date.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chs.Length; i++)
{
对十的处理
情况 翻译成:
十 10
十几 1
几十 0
几十几 不翻译
if (chs[i] == '十')
{
X代表字典中没有包含的字符
//十 X十X 10
if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
{
sb.Append("10");
}
//十几 X十几X 1
else if (!dic.ContainsKey(chs[i - 1]) && dic.ContainsKey(chs[i + 1]))
{
sb.Append("1");
}
//几十 X几十X 0
else if (dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
{
sb.Append("0");
}
//几十几 X几十几X 空
else if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
{
sb.Append("");
}
}
else if (dic.ContainsKey(chs[i]))
{
//字典中存在就输出对应值
sb.Append(dic[chs[i]].ToString());
}
else if (chs[i] == '年' || chs[i] == '月')
{
//年、月用—替换
sb.Append("-");
}
}
return sb;
}
}
}
总结:本题的难点在对十的处理,它可以返回10,1,0,“”;四种情况;字典是<char,char>类型的,要对输入字符串的每一个字符进行判断,如果通过chs[i]='x';然后
return new string(chs);字符串的方法会很棘手(如翻译成10时很难处理);这时要想到到StringBuilder的方法。
比如:二零一二年十二月月二十一日要转换为2012-12-21。(处理“十”
的问题:1.*月十日;2.*月十三日;3.*月二十三日;4.*月三十日;)
四中情况对“十”的不同翻译。1→10;2→1;3→不翻译;4→0【年部分不
可能出现’十’,都出现在了月与日部分。】
测试数据:二零一二年十二月二十一日(2012年12月21日)、二零零九年七
月九日、二零一零年十月二十四日、二零一零年十月二十日
分析:可以考虑用字典,给出键,输出对应值
难点在对十的处理
情况 处理
一个数 10
两个数 在前 1
两个数 在后 0
三个数 在中间(一定) 不翻译
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 日期格式转换
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请输入日期");
string dates = Console.ReadLine().Trim();
StringBuilder date = new StringBuilder();
date = GetDateFormat(dates);//具体的格式转化封装成了方法
Console.WriteLine(date);
Console.ReadKey();
Console.Clear();
}
}
/// <summary>
/// 方法:字典,再调用格式转换
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
private static StringBuilder GetDateFormat(string date)
{
//声明字典,存入日期相关的键值
Dictionary<char, char> dic = new Dictionary<char, char>();
//给出字符串,放入可能出现的各个键和值,十特殊处理
string txt = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";
//分割txt得到各个键值,分别存入字典
string[] keyValue = txt.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
//遍历数组,分别存入对应的键值对
for (int i = 0; i < keyValue.Length; i++)
{
if (!dic.ContainsKey(keyValue[i][0]))
{
dic.Add(keyValue[i][0], keyValue[i][1]);
}
}
//调用方法,返回数字格式的日期
return GetDigitDate(dic,date);
}
/// <summary>
/// 方法:格式转换
/// </summary>
/// <param name="dic"></param>
/// <param name="date"></param>
/// <returns></returns>
private static StringBuilder GetDigitDate(Dictionary<char, char> dic, string date)
{
//字符串转为字符数组
char[] chs = date.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chs.Length; i++)
{
对十的处理
情况 翻译成:
十 10
十几 1
几十 0
几十几 不翻译
if (chs[i] == '十')
{
X代表字典中没有包含的字符
//十 X十X 10
if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
{
sb.Append("10");
}
//十几 X十几X 1
else if (!dic.ContainsKey(chs[i - 1]) && dic.ContainsKey(chs[i + 1]))
{
sb.Append("1");
}
//几十 X几十X 0
else if (dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
{
sb.Append("0");
}
//几十几 X几十几X 空
else if (!dic.ContainsKey(chs[i - 1]) && !dic.ContainsKey(chs[i + 1]))
{
sb.Append("");
}
}
else if (dic.ContainsKey(chs[i]))
{
//字典中存在就输出对应值
sb.Append(dic[chs[i]].ToString());
}
else if (chs[i] == '年' || chs[i] == '月')
{
//年、月用—替换
sb.Append("-");
}
}
return sb;
}
}
}
总结:本题的难点在对十的处理,它可以返回10,1,0,“”;四种情况;字典是<char,char>类型的,要对输入字符串的每一个字符进行判断,如果通过chs[i]='x';然后
return new string(chs);字符串的方法会很棘手(如翻译成10时很难处理);这时要想到到StringBuilder的方法。
相关文章推荐
- 输入阿拉伯数字(整数),输出对应的中文(美团网2014年9月16日笔试题目之一)
- 输入一行只含有数字的字符串,输出对应的中文
- SQL Server的日期输入输出格式设置(转)
- 输入一个无符号十进制数字串,以四位十六进制的形式输出该串对应的值。
- 输入一串只有由1-9对应数字的拼音输出对应的数字如输入为yiersan输出为:123
- 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
- 将数字类型格式的日期转换为中文格式
- 题目:要求从键盘输入一数字,然后中文输出(要符合中文语法)
- ASP.NET中将数字日期转换为中文格式
- JavaScript将输入的数字金额转换成对应的中文大写金额
- javascript 数字日期格式转换为中文
- 输入数字,输出中文大写
- 汇编语言:输入两个数,不大于30,有提示,比较两个数字,如果相等,计算和,如果不相等,计算平均值,并且都要以2进制的格式输出,按照升序输出,计算两个数字各占和的百分比,并且按照“%”的格式输出。
- 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
- 文本输入限制正则 英文、中文、数字、日期等
- 阿拉伯数字转换成对应的大写中文输出
- 作业:输出中文格式日期
- 输入本机中文格式的日期时间
- c#代码01--控制台的简单输入与输出及日期的格式输出
- 将一个键盘输入的数字转化成中文输出。(例如:输入:1234567 输出:一百二拾三万四千五百六拾七)