参考代码:
int atoi(const char *str)
{
if(str == NULL || *str == '\0') {
printf("invalid input\n");
return 0;
}
int sign = 1;
int sum = 0;
if(*str == ' ') ++str;
if(*str == '+') ++str;
else if(*str == '-') {
sign = -1;
++str;
}
while(*str >= '0' && *str <= '9')
{
sum = sum * 10 + *str - '0';
++str;
}
return sum * sign;
}
测试用例:str = "+", str = “+aaa”;输出为0,为有效输入,其实应该是无效输入
剑指offer代码:
#include<stdio.h>
#include<stdlib.h>
enum status {kvalid = 0, kinvalid};
int flag = kinvalid;
int atoi(const char *str)
{
if(str == NULL || *str == '\0') {
flag = kinvalid;
return 0;
}
int sign = 1;
int sum = 0;
if(*str == ' ') ++str;
if(*str == '+') ++str;
else if(*str == '-') {
sign = -1;
++str;
}
if(*str != '\0')
{
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
sum = sum * 10 + *str - '0';
if((sign * sum > 0x7FFFFFFF)
|| (sign * sum < 0x80000000))
{
sum = 0;
break;
}
++str;
} else {
sum = 0;
break;
}
}
if(*str == '\0') flag = kvalid;
}
return sum * sign;
}
测试用例:str = “123a” 输出为0,为无效输入,按照atoi函数的本意,输出为123