虽然一开始就参照c++的atoi,但是还是没考虑到超过最大最小范围。
int atoi1(const char *str) {
int i = 0;
unsigned int res = 0;
bool negf = false;
while (str[i] == ' ')i++;
if (str[i] == '-')
{
negf = true; i++;
}
else if (str[i] == '+') i++;
int j = i;
while (str[j])
{
if (!isdigit(str[j]))
{
break;
}
j++;
}
while (i < j)
{
if (res > 214748364 || (res == 214748364 && str[i] - '0' > 7))
{
return negf ? 0 - 2147483648 : 2147483647;
}
res *= 10;
res += str[i++] - '0';
}
return negf ? 0 - res : res;
}