您的位置:首页 > 其它

输入中文日期输出对应的数字格式的日期

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的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐