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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李永涛 于 2012-11-26 13:47 编辑

前些天在做基础测试题的时候有那么一题:写一个方法,实现MyTryParse的功能。
就是写一个方法来实现类型转换,在网上查了一些资料,是写了一个将string类型转换成int类型的方法

代码如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace test9
  6. {
  7.     class Program
  8.     {
  9.         //写一个方法,实现MyTryParse的功能
  10.         static void Main(string[] args)
  11.         {
  12.             string s1 = Console.ReadLine();
  13.             int i;
  14.             if (myTryParse(s1, out i))
  15.             {
  16.                 Console.WriteLine("转换成功:" + i);
  17.             }
  18.             else
  19.             {
  20.                 Console.WriteLine("转换失败:请输入数字!");
  21.             }
  22.             Console.ReadKey();


  23.         }

  24.         static bool myTryParse(string s, out int i)
  25.         {
  26.             try
  27.             {
  28.                 int temp = Convert.ToInt32(s);

  29.             }
  30.             catch
  31.             {
  32.                 i = -1; return false;
  33.             }
  34.             if (Convert.ToInt32(s) >= 0 || Convert.ToInt32(s) < 0)
  35.             {
  36.                 i = Convert.ToInt32(s);
  37.                 return true;
  38.             }
  39.             else
  40.             {
  41.                 i = -1;
  42.                 return false;
  43.             }
  44.         }

  45.     }
  46. }
复制代码
在myTryParse中不太明白这段代码  int temp = Convert.ToInt32(s);  有什么作用呢?直接把下面一段代码放到try中不就可以了么?
  1.    if (Convert.ToInt32(s) >= 0 || Convert.ToInt32(s) < 0)
  2.             {
  3.                 i = Convert.ToInt32(s);
  4.                 return true;
  5.             }
  6.             else
  7.             {
  8.                 i = -1;
  9.                 return false;
  10.             }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
本帖最后由 wrx362114 于 2012-11-26 10:38 编辑

都自己写转换了,还调用Convert.ToInt32(s)
写string转int的方法,先判断字符串中是否只有数字,包含其他字符就返回错误,
从最前一个非0的数字开始,看有效字符串多长.然后用这个长度乘以位权,所有字符的结果加起来,
就是要转换的结果了,
回复 使用道具 举报
wrx362114 发表于 2012-11-26 10:30
都自己写转换了,还调用Convert.ToInt32(s)
写string转int的方法,先判断字符串中是否只有数字,包含其他字符 ...

这样不太明白,求代码···:)
回复 使用道具 举报
  1. static bool MyTryParse(string str, out int i)
  2.         {   //输入的数是正数还是负数
  3.             int temp = 0;
  4.             int length = str.Length;
  5.             if (str[0] == '-')
  6.             {
  7.                 if (length == 1)
  8.                 {
  9.                     i = 0;
  10.                     return false;
  11.                 }//判断是否有其他字符
  12.                 for (int j = 1; j < length; j++)
  13.                 {
  14.                     if (str[j] <= '0' || str[j] >= '9')
  15.                     {
  16.                         i = 0;
  17.                         return false;
  18.                     }
  19.                 }
  20.                 //到这里字符串中都是数字
  21.                 for (int j = 1; j < length - 1; j++)
  22.                 {
  23.                     temp += (str[j] - '0') * (Int32)Math.Pow(10,(length - j - 1));
  24.                 }
  25.                 temp += str[length - 1] - '0';
  26.                 temp *= -1;
  27.             }
  28.             else
  29.             {   if (length == 0)
  30.                 {
  31.                     i = 0;
  32.                     return false;
  33.                 }//判断是否有其他字符
  34.                 for (int j = 0; j < length; j++)
  35.                 {
  36.                     if (str[j] <= '0' || str[j] >= '9')
  37.                     {
  38.                         i = 0;
  39.                         return false;
  40.                     }
  41.                 }
  42.                 //到这里字符串中都是数字
  43.                 for (int j = 0; j < length - 1; j++)
  44.                 {
  45.                     temp += (str[j] - '0') * (Int32)Math.Pow(10,(length - j - 1));
  46.                 }
  47.                 temp += str[length - 1] - '0';
  48.             }
  49.             i = temp;
  50.             return true;
  51.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
wrx362114 发表于 2012-11-26 12:11

可以再优化的更短一些,有些句子是没有必要的,
不过我要去做积分题了,这个代码可以实现就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马