题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0. 输入一个字符串,包括数字字母符号,可以为空。如果是合法的数值表达则返回该数字,否则返回0。
这道题没有独特的解题思路,就按照要求做就可以。首先输入的字符串前面一部分可能有空格,或者整个是一个空字符串,所以首先要把空格去掉,用一个循环就可以搞定。如果发现空格的长度和字符串的长度相同,说明整个字符串都是由空格组成,直接返回0即可。
然后要判断这个数是正还是负,也就是字符串里有没有+、-。可以用一个flag来保存,默认flag为正数,如果去掉空格后的字符串以-开头,那么将flag置为负数。
下一步开始计算数值res,这个数要用long long类型来保存,如果读入的字符在0~9之间,那么让res*10 再加上当前字符的数值就可以了。如果读入的字符非法,直接返回0.
然后看一下之前的flag,如果是负数,还要再乘-1.
最后判断数值是否合法,在INT_MIN和INT_MAX之间,如果不合法,也返回0. 还要注意在最开始的时候特判一下字符串本身是否为空,如果为空,直接返回0.
c++代码如下:
1 class Solution { 2 public: 3 int StrToInt(string str) { 4 if(str.empty()) return 0; 5 int k = 0; 6 bool isminus = false; 7 while(k < str.size() && str[k] == ' ') k++; 8 if(k == str.size()) return 0; 9 if(str[k] == '+') k++; 10 else if(str[k] == '-') isminus = true, k++; 11 long long res = 0; 12 while(k < str.size()){ 13 if(str[k] >= '0' && str[k] <= '9') res = res * 10 + str[k] - '0', k++; 14 else return 0; 15 } 16 17 if(isminus) res *= -1; 18 if(res < INT_MIN || res > INT_MAX) return 0; 19 return res; 20 } 21 };