65. Valid Number

Posted zzz-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 };

 






以上是关于65. Valid Number的主要内容,如果未能解决你的问题,请参考以下文章

65. Valid Number *HARD*

65. Valid Number

65. Valid Number

65. Valid Number

65. Valid Number

65.Valid Number