A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ARMdong 中级黑马   /  2012-7-20 22:44  /  3461 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天做黑马的基础测试题的时候,遇到一题。说是给定一个时间,如:2012年07月20日,然后让你将其转换为大写汉字表示,如:二零一二年七月二十日。
在做这道题目的时候我只想到了用SubString()这个方法还有switch-case来解决,但是具体怎么实现,我还是没有想出来,求解!希望大家帮帮忙,教教小弟怎么解决这道题。感谢……

点评

个人觉着split在这里更合适些  发表于 2012-7-21 11:53

8 个回复

倒序浏览
#region 输出事件
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtDate.Text.Trim()))
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "test", @"alert('输入不为空');", true);
            }
            try
            {
                string result = "";
                DateTime time = Convert.ToDateTime(txtDate.Text);
                string year = time.Year.ToString();
                int month = time.Month;
                int day = time.Day;
                result += GetStr(year[0].ToString()) + GetStr(year[1].ToString()) + GetStr(year[2].ToString()) + GetStr(year[3].ToString()) + "年";
                if (month <= 9)
                {
                    result += GetStr(month.ToString()) + "月";
                }
                else
                {

                    switch (month)
                    {
                        case 10:
                            result += "十月";
                            break;
                        case 11:
                            result += "十一月";
                            break;
                        case 12:
                            result += "十二月";
                            break;
                    }
                }
                if (day <= 9)
                {
                    result += GetStr(day.ToString()) + "日";
                }
                else if (day == 10)
                {
                    result += "十日";
                }
                else if (10 < day && day < 20)
                {
                    result += "十" + GetStr(GetStr(day.ToString()[1].ToString()))+"日";
                }
                else if(day==20)
                {
                    result += "二十日";
                }else if(20<day&&day<30)
                {
                    result += "二十" + GetStr(GetStr(day.ToString()[1].ToString())) + "日";
                }
                else if (day == 30)
                {
                    result += "三十日";
                }
                else
                {
                    result += "三十一日";
                }
                //litMsg.Text = time.Year + "年" + time.Month + "月" + time.Day + "日";
                //litMsg.Visible = true;
            }
            catch
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "test", @"alert('时间格式错误');", true);
            }
        }
        #endregion

        public string GetStr(string str)
        {
            string result = "";
            switch (str)
            {
                case "0:":
                    result = "零";
                    break;
                case "1":
                    result = "一";
                    break;
                case "2":
                    result = "二";
                    break;
                case "3":
                    result = "三";
                    break;
                case "4":
                    result = "四";
                    break;
                case "5":
                    result = "五";
                    break;
                case "6":
                    result = "六";
                    break;
                case "7":
                    result = "七";
                    break;
                case "8":
                    result = "八";
                    break;
                case "9":
                    result = "九";
                    break;
            }
            return result;
        }
回复 使用道具 举报
本帖最后由 高宜 于 2012-7-21 00:18 编辑

上面提取日期的方法还是很漂亮的 。值得采纳!
不过后面关于转换,我觉得直接把大写的数字作为数组中的元素,然后通过查地址得到大写数字,更为简单有效。

点评

这样代码看着也不会给人很累赘的感觉啊  发表于 2012-7-21 11:55
回复 使用道具 举报
遍历这个字符串,转换为char数组,然后再用switch-case来转换.

点评

盗用兄弟的思路我也实现了个  发表于 2012-7-21 01:53

评分

参与人数 1黑马币 +8 收起 理由
ARMdong + 8 思路很漂亮,学习了!

查看全部评分

回复 使用道具 举报

  1.         static void Main(string[] args)
  2.         {
  3.            string[] strDate = getDate("2012年12月13日");
  4.            string year = day(strDate[0]);
  5.            string month = days(strDate[1]);
  6.            string strday = days(strDate[2]);
  7.            Console.WriteLine("{0}年{1}月{2}日", year, month, strday);
  8.            Console.ReadKey();
  9.         }
  10.         static string[] getDate(string date)
  11.         {
  12.            string[] strdate = date.Split(new char[] { '年', '月', '日' });
  13.            return strdate;
  14.         }
  15.         /// <summary>
  16.         /// 适用于年份
  17.         /// </summary>
  18.         /// <param name="d">日期的阿拉伯数字</param>
  19.         /// <returns>大写数字</returns>
  20.         static string day(string d)
  21.         {
  22.             char[] cday = new char[] { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
  23.             char[] cd = d.ToCharArray();
  24.             string rd = "";
  25.             foreach (char i in cd)
  26.             {
  27.                 rd += cday[i - 48];
  28.             }
  29.             return rd;
  30.         }
  31.         /// <summary>
  32.         /// 适用于月和日
  33.         /// </summary>
  34.         /// <param name="d">日期的阿拉伯数字</param>
  35.         /// <returns>大写数字</returns>
  36.         static string days(string d)
  37.         {
  38.             char[] cday = new char[] { '十', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
  39.             char[] cd = d.ToCharArray();
  40.             string rd = "";
  41.             if (cd.Length > 1 && !cd[1].Equals('0'))
  42.             {
  43.                 if (cd[0].Equals('1'))
  44.                 {
  45.                     rd = cday[0] + "" + cday[cd[1] - 48];
  46.                 }
  47.                 else {
  48.                     rd = cday[cd[0] - 48] + "十" + cday[cd[1] - 48];
  49.                 }
  50.             }
  51.             else if (cd.Length > 1 && cd[1].Equals('0'))
  52.             {
  53.                 if (cd[0].Equals('1'))
  54.                 {
  55.                     rd = cday[0].ToString();
  56.                 }
  57.                 else
  58.                 {
  59.                     rd = cday[cd[0] - 48] + "十";
  60.                 }
  61.             }
  62.             else {
  63.                rd = day(d);
  64.             }
  65.             return rd;
  66.         }
复制代码
回复 使用道具 举报
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("2011年6月4日转换后为:{0}", converDate("2011年6月4日"));
            Console.ReadLine();
        }
        public static string converDate(string date)
        {
            string[] c = new string[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "年", "月", "日" };
            StringBuilder str = new StringBuilder();
            for (int count = 0; count < date.Length; count++)
            {
                string temp = date.Substring(count, 1);
                switch (temp)
                {
                    case "1": str.Append(c[1]); break;
                    case "2": str.Append(c[2]); break;
                    case "3": str.Append(c[3]); break;
                    case "4": str.Append(c[4]); break;
                    case "5": str.Append(c[5]); break;
                    case "6": str.Append(c[6]); break;
                    case "7": str.Append(c[7]); break;
                    case "8": str.Append(c[8]); break;
                    case "9": str.Append(c[9]); break;
                    case "0": str.Append(c[0]); break;
                    case "年": str.Append(c[10]); break;
                    case "月": str.Append(c[11]); break;
                    case "日": str.Append(c[12]); break;
                    default: break;
                }
            }
            return str.ToString();
}
}
}
回复 使用道具 举报
李朋朋 发表于 2012-7-21 09:50
using System;
using System.Collections.Generic;
using System.Linq;

这个思路跟我想的一样,但是对StringBuilder()这个方法不太了解,很好,我去研究一下。。。
回复 使用道具 举报
李朋朋 发表于 2012-7-21 09:50
using System;
using System.Collections.Generic;
using System.Linq;

程序没写全么?你这个有问题啊,十一月,十二月怎么显?两位数的月日转换会有问题
回复 使用道具 举报
邓戊庚 发表于 2012-7-21 00:36
遍历这个字符串,转换为char数组,然后再用switch-case来转换.

:lol  太客气了哥们.一起加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马