黑马程序员技术交流社区

标题: 将string类型看做一个char数组,char中逐个元素强制转换的问题 [打印本页]

作者: 郑玉赛    时间: 2012-5-18 09:51
标题: 将string类型看做一个char数组,char中逐个元素强制转换的问题
本帖最后由 郑玉赛 于 2012-5-18 23:53 编辑

Console.WriteLine("请输入18位有效身份证号");
            string s = Console.ReadLine();
            if (s.Length == 18)//可以把string类型看做一个char数组,这里就判断数组长度是否为18
            {
                for (int i = 0; i < 18; i++)
                {
                    try
                    {
                        int j = Convert.ToInt32(s);//尝试强制转换,如果18个元素都成功了就证明输入的全部是数字。
                        Console.WriteLine(j);
                    }
                    catch
                    {
                        Console.WriteLine("输入非法");
                    }
                }
            }
            else
            {
                Console.WriteLine("身份证必须为18位数");
            }
            Console.ReadKey();
运行的时候,发现程序把每个元素都转换成元素的ASCII码值再输出了,这是为什么?该怎么样才能解决?

作者: 谢栋文    时间: 2012-5-18 10:23
int j = Convert.ToInt32(s);//尝试强制转换,如果18个元素都成功了就证明输入的全部是数字。
                        Console.WriteLine(j);
你这里转换不恰当。。。字符都是有ASCII码的,你这里转换就相当于把字符转换成ASCII码,输出当然是ASCII码了
判断字符是不是数字应该用IsDigit(Char)
所以这里应该改成:
  1. Console.WriteLine("请输入18位有效身份证号");
  2.             string s = Console.ReadLine();
  3.             if (s.Length == 18)//可以把string类型看做一个char数组,这里就判断数组长度是否为18
  4.             {
  5.                 for (int i = 0; i < s.Length; i++)
  6.                 {
  7.                     if (Char.IsDigit(s[i]))//判断s中每一个字符是否是数字
  8.                     {
  9.                         Console.WriteLine(s[i]);
  10.                     }
  11.                     else
  12.                     {
  13.                         Console.WriteLine("不是数字,输入非法");
  14.                     }
  15.                     
  16.                 }
  17.             }
  18.             else
  19.             {
  20.                 Console.WriteLine("身份证必须为18位数");
  21.             }
  22.             Console.ReadKey();
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2