【LeetCode 8_字符串_实现】String to Integer (atoi)
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、空字符串、字符串中有非数字、字符串开始的一段有空格等。