字符串转换为整数

题目:

输入一个表示整数的字符串,把该字符串转换成整数并输出。
例如输入字符串"345",则输出整数345。

思路:

1.每扫描到一个字符,我们把在之前计算得到的值乘以10再加上当前字符表示的数字值。

2.由于整数字符串中可能不仅仅含有数字,还有可能以'+'或者'-'开头,表示整数的正负,如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。

3.输入的字符串中可能含有不是数字的字符,每当碰到这些非法的字符,我们就没有必要再继续转换。

4.还要考虑的问题是溢出问题,由于输入的数字是以字符串的形式输入,因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数范围从而导致溢出。

总之结果算法的值应当尽量要和C运行时库中的atoi()函数计算的结果要一样。

代码如下:

 1 #include <limits> 
 2 #include <iostream>
 3 using namespace std;
 4 
 5 bool noExcpetion = false;
 6 int StrToInt(const char* str)
 7 {
 8     _int64 num = 0;
 9     if(str != NULL)
10     {
11         const char* digit = str;
12         // the first char in the string maybe '+' or '-'
13         bool minus = false;
14         if(*digit == '+')
15         {
16             digit++;
17         }
18         else if(*digit == '-')
19         {
20             digit++;
21             minus = true;
22         }
23         // the remaining chars in the string
24         while(*digit != '')
25         {
26             if(*digit >= '0' && *digit <= '9')
27             {
28                 num = num * 10 + (*digit - '0');
29                 // overflow 
30                 if(num > numeric_limits<int>::max())
31                 {
32                     num = 0;
33                     break;
34                 }
35                 digit ++;
36             }
37             // if the char is not a digit, invalid input
38             else
39             {
40                 num = 0;
41                 break;
42             }
43         }
44         if(*digit == '')
45         {
46             noExcpetion = true;
47             if(minus)
48             {
49                 num = 0 - num;
50             }
51         }
52     }
53     return static_cast<int>(num);
54 }
55 
56 void main()
57 {
58     printf("The result is %d
", StrToInt("00000000000222222222"));
59     if(!noExcpetion)
60     {
61         printf("Input Error! The value was set to be zreo!
");
62     }
63 }
原文地址:https://www.cnblogs.com/xiaoxu1st/p/3734589.html