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