将二零一二年十月二十四日的格式转换成2012-10-24

因为这个让我改了又改,初期忘了很多可能的情况,在完成的过程中很纠结,代码写的也很缭乱。

 

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了。

 

 

上面的优化部分是在博客上直接手打的,可能有一些小的错误,在做调节。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值