写atoi函数的时候需要注意一下几点
1. 字符串前的空白
2. 字符串所表示数值的正负号
3. 结束条件,遇到非数字或者字符'\0'结束
4. 考虑溢出,分别与int值所能表示的最大(0x7fffffff)和最小值(0x8000000)进行比较
5. 考虑异常输入情况下,用全局变量valid来标识,对于"+/-" "0" "+abc"需要进行区分
1 #define INT_MAX ((int)0x7FFFFFFF) 2 #define INT_MIN ((int)0x80000000) 3 //#define INT_MAX (~(unsigned int)0/2) 4 5 bool valid=true; 6 7 int myatoi(const char * str) 8 { 9 bool minus=false; 10 long long result=0; 11 valid=false; 12 if(str==NULL) 13 return 0; 14 while(*str==' ') 15 str++; 16 if(*str=='-') 17 { 18 minus=true; 19 str++; 20 } 21 else if(*str=='+') 22 str++; 23 if(*str<'0'||*str>'9') 24 return 0; 25 26 valid=true; 27 while(*str>='0' && *str<='9') 28 { 29 result=result*10+*str-'0'; 30 if((minus && result>INT_MAX + 1LL) || (!minus && result>INT_MAX)) 31 { 32 valid=false; 33 return 0; 34 } 35 36 str++; 37 } 38 39 if(minus) 40 result*=-1; 41 return (int)result; 42 }