using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _911日期转换
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入日期");
string input= Console.ReadLine();
Console.WriteLine(convert(input));
Console.ReadKey();
}
public static string convert(string date)
{
Dictionary<char, char> dict = new Dictionary<char, char>();
string dictionary = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";
string[] dictionary2= dictionary.Split(' ');
for (int i = 0; i < dictionary2.Length; i++)
{
dict.Add(dictionary2[i][0], dictionary2[i][1]);//把数组添加进字典
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < date.Length; i++)
{
if (dict.ContainsKey(date[i]))//字典有的字符直接添加
{
sb.Append(dict[date[i]]);
}
else if (!dict.ContainsKey(date[i]) && date[i] != '十')
{
sb.Append('-');
}
else
{
if (!dict.ContainsKey(date[i - 1]) && !dict.ContainsKey(date[i + 1]))//二零一二年三月十日 2012-3-10
{
sb.Append("10");
}
else if (!dict.ContainsKey(date[i - 1]) && dict.ContainsKey(date[i + 1]))//二零一二年三月十三日 2012-3-13
{
sb.Append("1");
}
else if (dict.ContainsKey(date[i - 1]) && dict.ContainsKey(date[i + 1])) //二零一二年三月二十三日
{
}
else if (dict.ContainsKey(date[i - 1]) && !dict.ContainsKey(date[i + 1])) //二零一二年三月二十日 2012-3-20
{
sb.Append('0');
}
}
}
return sb.ToString().TrimEnd('-');
}
}
}
把大写日期转换成阿拉伯数字的算法。原理是:首先定义一个convert类,这个类中是处理用户输入的大写日期,并且返回处理结果,在main函数中输出。
Convert类中的原理如下:先定义一个准备写入字典的字符串dictionary,然后利用for循环写入到字典dict中,定义一个sb的可变字符串,在下面的循环中通过判断条件,符合条件的if分支写入到sb中,最后返回。循环中的判断条件最为关键,分为以下几种情况:
字典中有的字符,直接添加,字典中没有的,并且不是字符十的,那么也就是年月日啦。这个是给sb中填入-
二零一二年三月十日 2012-3-10 这个10日,是十的前面字典中没有的字符,后面也是没有的字符。这种的直接在sb中填入10;
二零一二年三月十三日 2012-3-13 这种的十前面在字典中没有的字符,后面有的。直接在sb中填入1
二零一二年三月二十三日这种前面有,后面也有的,什么也不填
二零一二年三月二十日 2012-3-20 这种前面有,后面没有的,在sb中填入0