题解 | #把字符串转换成整数(atoi)#
把字符串转换成整数(atoi)
https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f
class Solution {
public:
const int min = pow(2,31) * (-1);
const int max = pow(2,31) - 1;
int StrToInt(string s) {
int sign = 0; //符号
int len = s.length(); //字符串长度
int signcount = 0; //符号个数
vector<int> rec;
for(int i =0;i < len;i++){
if(s[i] == '+' || s[i] == '-'){
signcount ++;
if(s[i] == '-') sign = 1; //符号置1
if(signcount > 1) return 0; //符号个数大于1个,出错返回0
}
else if(s[i] == '0' || s[i] == '1' || s[i] == '2' || s[i] == '3' || s[i] == '4' || s[i] == '5' || s[i] == '6' || s[i] == '7' || s[i] == '8' || s[i] == '9'){
rec.push_back(s[i] - '0'); //前面只有空格和符号,碰到数字插入数字即可
if(i+1 <len && s[i+1] != '0' && s[i+1] != '1' && s[i+1] != '2' && s[i+1] != '3' && s[i+1] != '4' && s[i+1] != '5' && s[i+1] != '6' && s[i+1] != '7' && s[i+1] != '8' && s[i+1] != '9') break; //数字的下一位不是数字,说明当前合法数字已提取完毕,可以退出
}
else if(s[i] == ' ') continue; //如果碰到数字前是空格,就继续
else break; //碰到数字前,遇到非符号,非空格 结束
}
if(rec.size() == 0) return 0;
long sum = 0;
for(auto x : rec){
sum = sum * 10 + x;
if(sum > max){ //超过最大值最小值,返回最大值或最小值
if(sign == 1) return min;
else return max;
}
}
if(sign == 1) return sum * (-1);
else return sum;
}
};
查看5道真题和解析