alidate 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.
断断续续做了2小时,各种情况想不到,最后崩溃了……
由于科学计数法的引入,要考虑 ‘.‘ ‘-‘ ‘+‘‘e‘和数字的位置、个数关系。
如果能够了解以上的字符出现时在之前可以出现的字符都有哪些,这个问题就能够顺利解决。
最后贴上水码,以后再重新做一遍。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 |
class
Solution {public: bool
isNumber(const
char *s) { int
i = 0; int
flag_num = 0; //int flag_numa = 0; int
flag_dot = 0; int
flag_dota = 0; int
flag_minus = 0; int
flag_plus = 0; int
flag_e = 0; int
flag_ea = 0; int
flag_blank = 0; int
flag_blanka = 0; while(s[i]!=‘\0‘) { if(s[i] == ‘ ‘) { if(flag_num == 1|| flag_dot ==1 || flag_plus == 1)flag_blank = 1; i++; continue; } if(s[i] >= ‘0‘
&& s[i] <= ‘9‘) { flag_num = 1; if(flag_e == 1)flag_ea = 1; if(flag_dot == 1)flag_dota = 1; if(flag_blank == 1)return
0; i++; continue; } if(s[i] == ‘.‘) { if(flag_dot == 1 || flag_blank == 1 ||flag_e == 1 )return
0; else flag_dot = 1; //if(s[i+1] == ‘ ‘)return 0; i++; continue; } if(s[i] == ‘-‘) { if(flag_minus == 1)return
0; if(flag_num == 1 && flag_e == 1 ); else
if(flag_num == 1 || flag_dot == 1 )return
0; if(flag_minus == 0)flag_minus = 1; else { if(flag_num == 1)return
1; else
flag_num = 1; } i++; continue; } if(s[i] == ‘+‘) { if(flag_ea == 1)return
0; if(flag_num == 0 && flag_plus == 0|| flag_num == 1&&flag_e == 1)i++; else
return 0; //if(flag_dot == 1 && flag_num == 1)return 0 ; if( flag_dot ==1 && flag_e == 0)return
0; flag_plus = 1; continue; } if(s[i] >= ‘a‘
&& s[i] <= ‘z‘
|| s[i] >= ‘A‘
&& s[i] <= ‘Z‘) if(s[i] == ‘e‘
&& flag_e == 0 && flag_num == 1 ) {i++;flag_e=1;} else
return 0; } //if(s[i-1] == ‘.‘)return 0; if(flag_e == 1 && flag_ea == 1)return
1; if(flag_e == 1 && flag_ea == 0)return
0; if(flag_dot == 1 && flag_dota == 1)return
1; //if(flag_dot == 1 )return 0; if(flag_num == 1)return
1; else
return 0; }}; |
原文:http://www.cnblogs.com/pengyu2003/p/3575023.html