没有啥好解释的啦,关键是要考虑所有的情况,比如正负号,溢出,输入等。
1 enum Status {kValid = 0 , kInvalid}; 2 bool g_nStatus = kValid ; 3 4 int StrToInt(const char* str) 5 { 6 g_nStatus = kInvalid; 7 long long num = 0 ; 8 if (str != NULL && str != '\0') 9 { 10 bool minus = false ; 11 if (*str == '+') 12 { 13 str++; 14 } 15 else if (*str == '-') 16 { 17 str++; 18 minus = true; 19 } 20 if (*str != '\0') 21 { 22 num = 23 } 24 } 25 return (int)num ; 26 } 27 28 long long StrToInt(const char* digit , bool minus) 29 { 30 long long num = 0 ; 31 while (*digit != '\0') 32 { 33 if (*digit >= '0' && *digit <= '9') 34 { 35 int flag = minus ? -1 : 1 ; 36 num = num * 10 + flag * (*digit - '0') ; 37 if ( (!minus && num > 0x7FFFFFFF) || (minus && num < 0x80000000) ) 38 { 39 num = 0 ; 40 break; 41 } 42 digit++ ; 43 } 44 else 45 { 46 num = 0 ; 47 break; 48 } 49 } 50 if (*digit == '\0') 51 { 52 g_nStatus = kValid ; 53 } 54 return num ; 55 }