1 #include<stdio.h> 2 enum Status {KValid = 0 , KInvalid}; 3 int g_nStatus = KValid; 4 long StrToIntCore( char *str, bool minus) 5 { 6 long num = 0 ; 7 while (*str != ' \0 ' ) 8 { 9 if (*str > ' 0 ' && *str< ' 9 ' ) 10 { 11 int flag = minus ? - 1 : 1 ; 12 num = num * 10 + flag*(*str - ' 0 ' ); 13 if ((!minus && num > 0x7FFFFFFF )||(minus && num <(signed int ) 0x80000000 )) 14 { 15 num = 0 ; 16 break ; 17 } 18 str++ ; 19 } 20 else 21 { 22 num = 0 ; 23 break ; 24 } 25 } 26 if (*str == ' \0 ' ) 27 { 28 g_nStatus = KValid; 29 } 30 return num; 31 } 32 int StrToInt( char * str) 33 { 34 g_nStatus = KInvalid; 35 long num = 0 ; 36 if (*str != NULL && *str != ' \0 ' ) 37 { 38 bool minus = false ; 39 if (*str == ' + ' ) 40 str++ ; 41 else if (*str == ' - ' ) 42 { 43 str++ ; 44 minus = true ; 45 } 46 if (*str != ' \0 ' ) 47 { 48 num = StrToIntCore(str,minus); 49 } 50 } 51 return int (num); 52 } 53 54 void main() 55 { 56 printf( " %d " ,StrToInt( " -12 " )); 57 }
在前面的代码中,把空字符串“”和只有一个正号或负号的情况都考虑到了。同事还考虑整数的最大值是0x7fffffff,最小值0x80000000,一次要分两种情况判断溢出。