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