int atoi(const char *str) {
if (str == NULL)
{
return 0;
}
while (*str == ' ')
{
str++;
}
bool negative = false;
if (*str == '+')
{
negative = false;
str++;
}
else if (*str == '-')
{
negative = true;
str++;
}
int num = 0;
while (*str != 0)
{
if (*str >= '0' && *str <= '9')
{
int curNum = int(*str - '0');
if (negative == false)
{
if (num > INT_MAX/10)
{
return INT_MAX;
}
num *= 10;
if ((INT_MAX - num) < curNum)
{
return INT_MAX;
}
num += curNum;
}
else
{
if (num < INT_MIN/10)
{
return INT_MIN;
}
num *= 10;
if (num < (INT_MIN + curNum))
{
return INT_MIN;
}
num -= curNum;
}
}
else
{
break;
}
str++;
}
return num;
}
需要注意的情况:
1.str是空指针
2.str中含有空格
3.数字之前有+-号,且不止一个
4.数字越界
5.数字之后出现别的字符