1 enum status{VALID = 0, INVALID}; 2 int g_status; 3 4 long long SubStrToInt(const char* str, bool minus) 5 { 6 long long num = 0; 7 int flag = minus ? -1 : 1; 8 9 while (*str != '\0') { 10 if (*str >= '0' && *str <= '9') { 11 num = num * 10 + flag * (*str - '0'); 12 13 if ((!minus && num > 0x7FFFFFFF) 14 || (minus && num < (signed int)0x80000000)) { 15 num = 0; 16 break; 17 } 18 str++; 19 } else { 20 num = 0; 21 break; 22 } 23 } 24 if (*str == '\0') 25 g_status = VALID; 26 27 return num; 28 } 29 30 int StrToInt(const char* str) 31 { 32 g_status = INVALID; 33 long long num = 0; 34 bool minus = false; 35 36 if (str != NULL && *str != '\0') { 37 if (*str == '+') { 38 str++; 39 } 40 else if (*str == '-') { 41 minus = true; 42 str++; 43 } 44 45 if (*str != '\0') 46 num = SubStrToInt(str, minus); 47 } 48 return (int)num; 49 }
需要考慮的幾個方面:
1、輸入的字串表示正數、負數和0;
2、邊界值,最大的正整數和最小的負整數;
3、輸入字串為NULL、空字串、字串中有非數字、字串開始的一段有空格等。