字符串转整数
一定要判断是否越界,不然会出现runtime error的错误
题目:
需要判断是否越界,INT_MAX、INT_MIN为int类型的上下界。
错误1:
while(s[i] >= '0' && s[i] <= '9'){
k = s[i]-'0';
if((sign == 1) &&(ans>MAX_VALUE/10 || (ans == MAX_VALUE/10 && k>7)))
return MAX_VALUE;
if((sign == -1) && (ans<MIN_VALUE/10 || (ans == MIN_VALUE && k<-7)))
return MIN_VALUE;
ans = ans*10+k;
i++;
}
这里在下溢出时总是返回正上界,无法返回正确的下界,以为是我下界计算失误,检查后发现并没有。于是查看循环条件发现这里在进行判断时,已经将符号摘出去了,所以无论如何都不可能出现负数的情况,也就不可能出现下溢出且返回下边界。
于是进行修改,添加sign的判断条件,当sign=-1时,直接返回下边界。
class Solution {
public:
int myAtoi(string s) {
int i=0,k=0;
long long ans=0;
int n = s.size();
int sign = 1; //判断是否为负数
while(s[i]==' ') i++; //找到不是空格的第一个元素
if(s[i]=='-'){
sign = -1; //为负数,将flag记为true
i++;
}
else if(s[i]=='+') i++;
while(s[i] >= '0' && s[i] <= '9'){
k = s[i]-'0';
if (ans > INT_MAX / 10 || (ans == INT_MAX / 10 && s[i] > '7')) {
return sign > 0 ? INT_MAX : INT_MIN;
}
ans = ans*10+k;
i++;
}
return sign*ans;
}
};