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的主要内容,如果未能解决你的问题,请参考以下文章