[LeetCode] Valid Number

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

要写对这题着实不容易,很多细节需要考虑。先看看测试用例有哪些,然后再写就比较有针对性。最后看看哪些test case错了,再修一下bug。

 1 class Solution {
 2 public:
 3     bool isNumber(const char *s) {
 4         // Start typing your C/C++ solution below
 5         // DO NOT write int main() function
 6         if (s == NULL)
 7             return false;
 8             
 9         while(isspace(*s))
10             s++;
11             
12         if (*s == '+' || *s == '-')
13             s++;
14             
15         bool eAppear = false;
16         bool dotAppear = false;
17         bool firstPart = false;
18         bool secondPart = false;
19         bool spaceAppear = false;
20         while(*s != '\0')
21         {
22             if (*s == '.')
23             {
24                 if (dotAppear || eAppear || spaceAppear)
25                     return false;
26                 else
27                     dotAppear = true;
28             }
29             else if (*s == 'e' || *s == 'E')
30             {
31                 if (eAppear || !firstPart || spaceAppear)
32                     return false;
33                 else
34                     eAppear = true;
35             }
36             else if (isdigit(*s))
37             {
38                 if (spaceAppear)
39                     return false;
40                     
41                 if (!eAppear)
42                     firstPart = true;
43                 else
44                     secondPart = true;
45             }
46             else if (*s == '+' || *s == '-')
47             {
48                 if (sapceAppear)
49                     return false;
50                     
51                 if (!eAppear || !(*(s-1) == 'e' || *(s-1) == 'E'))
52                     return false;
53             }
54             else if (isspace(*s))
55                 spaceAppear = true;
56             else
57                 return false;
58                 
59             s++;            
60         }
61         
62         if (!firstPart)
63             return false;
64         else if (eAppear && !secondPart)
65             return false;
66         else
67             return true;
68     }
69 };
posted @ 2012-11-18 15:52  chkkch  阅读(2983)  评论(0编辑  收藏  举报