因为这个让我改了又改,初期忘了很多可能的情况,在完成的过程中很纠结,代码写的也很缭乱。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace zuoye7
{
class Program
{
static void Main(string[] args)
{
Console.Write("输入日期(二零一二年三月四日):");
Console.WriteLine("转换:{0}",zhuanhuan(Console.ReadLine()));
Console.ReadKey();
}
static string zhuanhuan(string a)
{
char[] k=a.ToCharArray();
string b = "1一 2二 3三 4四 5五 6六 7七 8八 9九 0零 -年 -月";
string[] c = b.Split(' ');
Dictionary<char, char> dic = new Dictionary<char, char>();
for (int i = 0; i < c.Length; i++)
{
dic.Add(c[i][1], c[i][0]);
}
StringBuilder str = new StringBuilder();
bool f = false, s = false;
foreach (var i in k)
{
if (s&&i == '十')
{
str.Append("1");
f = true;
s = false;
}
else
{
try
{
if (f && dic[i] == '-')
{
str.Append('0');
f = false;
}
}
catch
{
str.Append('0');
f = false;
}
if (dic.ContainsKey(i))
{
f = false;
s = false;
str.Append(dic[i]);
if (i != '日' && dic[i] == '-')
s = true;
}
}
//else
// str.Append("*");
}
return str.ToString();
}
}
}
上面的代码不够优化,想了想,就在这里简单的优化一下,大体的框架没有变化:
string b = "1一 2二 3三 4四 5五 6六 7七 8八 9九 0零 -年 -月";
bool f = false, s = false;
foreach (var i in k)
{
if (s&&i == '十')
{
str.Append("1");
f = true;
s = false;
}
else
{
try
{
if (f && dic[i] == '-')
{
str.Append('0');
f = false;
}
}
catch
{
str.Append('0');
f = false;
}
if (dic.ContainsKey(i))
{
f = false;
s = false;
str.Append(dic[i]);
if (i != '日' && dic[i] == '-')
s = true;
}
}
//else
// str.Append("*");
}
只是将上面的代码重写:
string b = "1一 2二 3三 4四 5五 6六 7七 8八 9九 0零 -年 -月 -日";
for(int i=0;i<k.Length;i++)
{
if(dic.ContainsKey(dic[k[i]]))
{
str.Append(dic[k[i]]);
}
else if(k[i]=='日');
else if(dic[k[i-1]]=='-')
{
if(dic[k[i+1]]=='-')
str.Append("10");
else
str.Append('1');
}
else
{
if(dic[k[i+1]]=='-')
str.Append("0");
}
}
以上是一种优化方法。
下面再说一种优化代码的方法,不过这个只是思路,而且也要简单的多。
就是把
string b = "1一 2二 3三 4四 5五 6六 7七 8八 9九 0零 -年 -月";
改成
string b = "1一 2二 3三 4四 5五 6六 7七 8八 9九 0零";
这样一来,在往字符串里存的时候就可以分三种情况判断了:
当是:1234567890的时候;
当是:年月日的时候;
当是:十的时候。
用if()else if() else if()这样嵌套的形式写入就OK了。
上面的优化部分是在博客上直接手打的,可能有一些小的错误,在做调节。。。。