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

案例:编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期

 比如:二零一二年十二月月二十一日要转换为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的方法。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值