字符串转化为整数

  1. 不使用atoi类似的库函数,将字符串转换为整形。
  2. 写一个把字符串的IP地址变成32位整数的函数。

1、思路:

  核心:num = num * 10 + (*str - '0')。但是要考虑诸多方面因素:1、str是否为NULL,或为空"";2、正负号问题;3、数字溢出或是可能不是0~9之间的字符。所以要设置相应的全局变量来标记异常情况,只有str为"0"时,才正常输出0。那么程序整个过程是先设置输出0和全局变量为false,只有没有异常,才输出数字并将全局变量设置为true。

 1  enum Status {kValid = 0, kInvalid};
 2  int g_nStatus = kValid;
 3  
 4  int StrToInt(const char* str)
 5  {
 6      g_nStatus = kInvalid;
 7      long long num = 0;
 8  
 9      if(str != NULL && *str != '\0') 
10      {
11          bool minus = false;
12          if(*str == '+')
13              str ++;
14          else if(*str == '-') 
15          {
16              str ++;
17              minus = true;
18          }
19  
20          if(*str != '\0') 
21          {
22              num = StrToIntCore(str, minus);
23          }
24      }
25  
26      return (int)num;
27  }
28  
29  long long StrToIntCore(const char* digit, bool minus)
30  {
31      long long num = 0;
32  
33      while(*digit != '\0') 
34      {
35          if(*digit >= '0' && *digit <= '9') 
36          {
37              int flag = minus ? -1 : 1;
38              num = num * 10 + flag * (*digit - '0');
39  
40              if((!minus && num > 0x7FFFFFFF) 
41                  || (minus && num < (signed int)0x80000000))
42              {
43                  num = 0;
44                  break;
45              }
46  
47              digit++;
48          }
49          else 
50          {
51              num = 0;
52              break;
53          }
54      }
55  
56      if(*digit == '\0') 
57      {
58          g_nStatus = kValid;
59      }
60  
61      return num;
62  }
StrToInt

 

posted on 2013-05-19 15:36  月moon鸟  阅读(489)  评论(0编辑  收藏  举报

导航