题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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] != '' && str[i] == ' ') i ++;//去掉开头空格 10 if(str[i] == '+') i ++; //处理开头正负号 11 else if(str[i] == '-') 12 { 13 flag = -1; 14 i ++; 15 } 16 while(str[i] != '') 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 };