题目描述:
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
解题思路:
需要处理的特殊条件:
- 输入为空;
- 带有正负号,可能不止一个;
- 非法输入(不是数字);
- 超过整数的最大值和最小值;
- 字符串只有0的时候应该返回0,但是异常也是返回0,要区分这两种情况。
Demo:
class Solution {
public:
bool g_flag = false;
int StrToInt(string str) {
int sz = str.size(), i = 0;
int flag = 1;
long long int res = 0;
// 省略前缀空格
for (; i < sz; i++)
if (str[i] != ' ') break;
// 处理正负号不止一个的情况
if (str[i] == '-') {
flag = -1;
i++;
}
if (str[i] == '+')
i++;
for (; i < sz; i++){
if(str[i] >= '0' && str[i] <= '9'){
res = res * 10 + (str[i] - '0');
// 处理溢出的情况
if ( flag == 1 && res >= 2147483647 )
return 2147483647;
if ( flag == -1 && res <= -2147483648 )
return -2147483648;
}
// 处理输入不是数字的情况
else return 0;
}
// 处理输入为空或者是输入只有0的情况
return flag == 1 ? res : -res;
}
};