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.数字之后出现别的字符
本文详细解析了将包含正负号和数字的字符串转换为整型数值的过程,包括边界条件处理和数字越界检查。
217

被折叠的 条评论
为什么被折叠?



