-
Notifications
You must be signed in to change notification settings - Fork 0
/
54表示数值的字符串.cpp
56 lines (52 loc) · 1.43 KB
/
54表示数值的字符串.cpp
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
//54
// 题目描述
// 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
// 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
// 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
class Solution {
public:
bool isNumeric(char* string)
{
if (string == nullptr)
return false;
if (*string == '+' || *string == '-')
++string;
if (*string == '\0')
return false;
bool numeric = true;
scanDigits(&string);
if (*string != '\0')
{
//小数
if (*string == '.')
{
++string;
scanDigits(&string);
if (*string == 'e' || *string == 'E')
numeric = isExponential(&string);
}
//整数
else if (*string == 'e' || *string == 'E')
numeric = isExponential(&string);
//+or-之后是其它
else
numeric = false;//比如'+'之后是'-'
}
return numeric && *string == '\0';
}
void scanDigits(char **string)
{
while(**string != '\0' && **string >= '0' && **string <= '9')
++(*string);
}
bool isExponential(char **string)
{
++(*string);
if (**string == '+' || **string == '-')
++(*string);
if (**string == '\0')
return false;
scanDigits(string);
return (**string == '\0') ? true : false;
}
};