leetcode第8题

题目大意是实现自己的atoi函数,即将将字符串中的数字转换为int型,如果不能转换则将其转换为0,若超过整形范围。则以最大值或最小值保存。代码如下,运行时间12ms.ret保存的是结果,sign标记第一个字符是+或-,代码首先将i定位到第一个不是空格的位置,base保存了INT_MAX/10的结果,若ret>base了,则ret10必定大于INT_MAX,若ret=base,而INT_MAX-ret10 =7,则说明当前的字符不能大于7,否则就超过了最大整数.。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int myAtoi(string str) 
{

int ret = 0, sign = 1;
i = str.find_first_not_of(' '), base = INT_MAX / 10;
if (str[i] == '+' || str[i] == '-')
sign = str[i++] == '+' ?: -1;
while (isdigit(str[i]))
{
if (ret > base || (ret == base && str[i] - '0' > 7))
return sign > 0 ? INT_MAX : INT_MIN;
ret = 10 * ret + (str[i++] - '0');
}
return sign * ret;
}