【LeetCode 8_字串_實現】String to Integer (atoi)

QingLiXueShi發表於2015-07-08

 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、空字串、字串中有非數字、字串開始的一段有空格等。

相關文章