49、剑指offer--把字符串转换成整数

题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 
输入描述:
输入一个字符串,包括数字字母符号,可以为空
 
 
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
 
输入例子:
+2147483647     1a33
 
输出例子:
2147483647     0
 
解题思路:本题需要考虑几个方面
1、如果非法输入,除了结果输出0,使用全局g_nStatus来标识(进入函数初始化为不合法,最后合法再置为合法)
2、正负号处理
3、数值越界
 1 #include <iostream>
 2 using namespace std;
 3 class Solution {
 4 public:
 5     enum status {kValid=0,kInvalid};
 6     int g_nStatus = kValid;
 7     int StrToInt(string str) {
 8         g_nStatus = kInvalid;
 9         long long num = 0;
10         const char *cstr = str.c_str();
11         if(cstr != NULL && *cstr != '\0')
12         {
13             int minus = 1;//符号
14             if(*cstr == '-')
15             {
16                 minus = -1;
17                 cstr++;
18             }
19             else if(*cstr == '+')
20             {
21                 cstr++;
22             }
23             while(*cstr != '\0')//记得是*cstr
24             {
25                 if(*cstr >= '0' && *cstr <= '9')
26                 {
27                     num = num*10 + *cstr-'0';
28                     cstr++;
29                     //数字越界
30                     if(((minus > 0) && (num > 0x7FFFFFFF)) || ((minus <0) && (num< (signed int)0x80000000)))//记住加signed int
31                     {
32  
33                         //g_nStatus = kInvalid;
34                         num = 0;
35                         break;
36                     }
37                 }
38                 else
39                 {
40                     //g_nStatus = kInvalid;
41                     num = 0;
42                     break;
43                 }
44             }
45             if(*cstr == '\0')
46             {
47                 g_nStatus = kValid;
48                 num = num*minus;
49             }
50         }
51         return (int)num;
52     }
53  
54 };
55 int main()
56 {
57     string s = "-123";
58     Solution a;
59     int res = a.StrToInt(s);
60     cout<<res<<endl;
61     return 0;
62 }

 

posted @ 2017-06-26 21:30  qqky  阅读(195)  评论(0编辑  收藏  举报