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