写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 }