写atoi函数的时候需要注意一下几点
1. 字符串前的空白
2. 字符串所表示数值的正负号
3. 结束条件,遇到非数字或者字符'\0'结束
4. 考虑溢出,分别与int值所能表示的最大(0x7fffffff)和最小值(0x8000000)进行比较
5. 考虑异常输入情况下,用全局变量valid来标识,对于"+/-" "0" "+abc"需要进行区分
#define INT_MAX ((int)0x7FFFFFFF)
#define INT_MIN ((int)0x80000000)
//#define INT_MAX (~(unsigned int)0/2)
bool valid=true;
int myatoi(const char * str)
{
bool minus=false;
long long result=0;
valid=false;
if(str==NULL)
return 0;
while(*str==' ')
str++;
if(*str=='-')
{
minus=true;
str++;
}
else if(*str=='+')
str++;
if(*str<'0'||*str>'9')
return 0;
valid=true;
while(*str>='0' && *str<='9')
{
result=result*10+*str-'0';
if((minus && result>INT_MAX + 1LL) || (!minus && result>INT_MAX))
{
valid=false;
return 0;
}
str++;
}
if(minus)
result*=-1;
return (int)result;
}