65. Valid Number

Validate if a given string is numeric.

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

判断字符串是否代表了有效数字。

这道题有点坑,情况比较多……

 1 class Solution {
 2 public:
 3     bool isNumber(string s) {
 4         int i = 0;
 5         int len = s.length() - 1;
 6         bool flag_p = false;
 7         bool flag_e = false;
 8         bool flag_n = false;
 9         bool flag_f = false;
10         //跳过首尾的空格
11         while (i < len && s[i] == ' ')
12             ++i;
13         while (len > i && s[len] == ' ')
14             --len;
15         //必须以数字或小数点结尾
16         if (len >= 0 && !(s[len] >= '0' && s[len] <= '9' || s[len] == '.'))
17             return false;
18         while (i <= len) {
19              if (s[i] >= '0' && s[i] <= '9') {
20                  ++i;
21                  flag_n = true;
22              }   
23             //小数点只能出现一次,并且不能作为指数
24              else if (s[i] == '.') {
25                  if (!flag_p && !flag_e) {
26                      flag_p = true;
27                      ++i;
28                  }
29                  else
30                      return false;
31             }
32             //e只能出现一次,且之前必须有数字
33             else if (s[i] == 'e') {
34                 if (!flag_e && flag_n) {
35                      flag_e = true;
36                      ++i;
37                  }
38                  else
39                      return false;
40             }
41             //正负号既可以作为底数的符号,也可以作为指数的。
42             //底数符号:只能第一个出现。前面不能有其他符号或数字
43             //指数符号:必须紧跟e之后
44             else if (s[i] == '+' || s[i] == '-') {
45                 if ((!flag_n && !flag_f && !flag_p) || (flag_e && s[i-1] == 'e' )) {
46                     flag_f = true;
47                     ++i;
48                 }
49                 else
50                     return false;
51             }
52             //不允许出现其他字符
53             else
54                 return false;
55         }
56         //必须要有数字
57         return flag_n;
58     }
59 };

猜你喜欢

转载自www.cnblogs.com/Zzz-y/p/9210921.html
今日推荐