这个题看起来比较简单,但是涉及到很多的边界问题......充分读懂题意真的很重要
1,空格仅在开始则跳过。
while(i<str.size()&&str[i]==' ')i++;
2,正数值<=INT_MAX(2147483647),负数值>=INT_MIN(-2147483648)
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && int(str[i] - '0') > 7))
if (rev < INT_MIN / 10 || (rev == INT_MIN / 10 && int(str[i] - '0') < -8))
3,整个字符串仅允许出现一次+、- 。其余情况 返回0,故用if来判断。
if(i<str.size()&&(str[i]=='+'||str[i]=='-'))sign=(str[i]=='-'?)-1:+1;
int myAtoi(string str) {
int len = str.size();
int flag=1 ;//1表示正数,-1表示负数
int res = 0;
int sign = 0;//0表示没有越界。1表示越界
int i=0;
while(i<len&&str[i]==' ') i++;
if(i<len&&(str[i] == '+'||str[i] == '-') ) {flag=(str[i++] == '-')?-1:1;}
for (i; i < len; i++) {
if (str[i]<'0' || str[i]>'9')
break;
else
{
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && int(str[i] - '0') > 7))
//if (rev < INT_MIN / 10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
{
sign = 1;
break;
}
else {
res = res * 10 + int(str[i] - '0');
}
}
}
if (sign == 1 && flag == 1) return INT_MAX;
if (sign == 1 && flag == -1) return INT_MIN;
res = flag * res;
return res;
}