题目描述:
Validate 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.
需要考虑的情况比较多。各用一个变量标记是否已经出现过,分开讨论。注意出现e的时候数字重新计算就好。代码:
class Solution {
public:
bool isNumber(const char *s) {
bool dot(false), e(false), num(false), blank(false), sig(false);
while (*s == ' ')
s++;
while (*s){
if (*s == '.'){
if (dot || e || blank)
return false;
dot = true;
}
else if (*s == 'e'){
if (!num || e)
return false;
e = true;
num = false;
}
else if (*s >= '0'&&*s <= '9'){
if (blank)
return false;
num = true;
}
else if (*s == ' ')
blank = true;
else if (*s == '+' || *s == '-'){
if (*(s - 1) != 'e' && (num || dot || sig))
return false;
sig = true;
}
else
return false;
s++;
}
if (num)
return true;
else
return false;
}
};