[剑指Offer] 49.把字符串转换成整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 

【思路】考虑所有特殊情况

1.数字前面有空格,如s="    123456",空格需舍弃。
2.数字前出现了不必要或多于的字符导致数字认证错误,输出0。如s="   b1234",s="  ++1233", s=" +-1121"。
3.数字中出现了不必要的字符,返回字符前的数字。如s="   12a1", s=" 123  123"。
4.数字越界,超过了范围(-2147483648--2147483647),分别返回-2147483648和2147483647。

 1 class Solution
 2 {
 3 public:
 4     int StrToInt(string str)
 5     {
 6         if(str == "")    return 0;
 7         int i = 0,flag = 1;
 8         long long num = 0;
 9         while(str[i] != '\0' && str[i] == ' ') i ++;//去掉开头空格
10         if(str[i] == '+') i ++;   //处理开头正负号
11         else if(str[i] == '-')
12         {
13             flag = -1;
14             i ++;
15         }
16         while(str[i] != '\0')
17         {
18             if(str[i] >= '0' && str[i] <= '9')
19             {
20                 num = num * 10 + str[i] - '0';
21                 i ++;
22                 if(num > INT_MAX){
23                     return (flag == 1)?INT_MAX:INT_MIN;
24                 }
25             }
26             else return 0;
27         }
28         num *= flag;
29         return num;
30     }
31 };

 

posted @ 2017-03-12 19:11  Strawberry丶  阅读(190)  评论(0编辑  收藏  举报