输入: “4193 with words”
输出: 4193
解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。
示例 4:
输入: “words and 987”
输出: 0
解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。
因此无法执行有效的转换。
示例 5:
输入: “-91283472332”
输出: -2147483648
解释: 数字 “-91283472332” 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。
result > INT_MAX / 10 || (result == INT_MAX / 10 && str[i] > '7')
重要的是这句,当能进入此次循环证明至少还有以为能加到result的后面,所以此时就应该判断它是否大于INT_MAX/10,如果大于,就没必要再判断了直接返回,如果不大于还需要判断是否等于INT_MAX/10,如果等于继续判断当前位是否>‘7’,因为INT_MAX等于2147483647,如果大于’7’,证明也是大于INT_MAX的,否则就应该返回result。
class Solution {
public:
int myAtoi(string str)
{
int result = 0, sign = 1;
int i = 0;
for(; str[i] == ' '; i++);
if(str[i] == '+')
{
sign = 1;
i++;
}
else if(str[i] == '-')
{
sign = -1;
i++;
}
for(; str[i] >= '0' && str[i] <= '9'; i++)
{
if(result > INT_MAX / 10 || (result == INT_MAX / 10 && str[i] > '7'))
{
return (sign == -1)? INT_MIN: INT_MAX;
}
result = result * 10 + (str[i] - '0');
}
return result * sign;
}
};