要想正确的写出这个函数不是件容易的事情,因为要考虑的事情很多:
1)字符串的前后都可能会有空格,但是中间不允许有空格。
2)可能有小数,1.235,或者.3522这种形式
3)可能有指数形式,2e10 2e-1等形式
Validate if a given string is numeric.
Some examples:
"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
然后逐位去查询,检验前提调试是否会成立,如果中间有一个不满足条件就返回false。
<span style="font-size:18px;">class Solution {
public:
bool isNumber(const char *s) {
while (*s == ' ') ++s;
while (*s == '+' || *s == '-') ++s;
bool exp = false, space = false, point = false;
bool number = false;
while (*s != '\0') {
if (isdigit(*s)) {
if (space) return false;
else number = true;
} else if (*s == '.') {
if (!point && !space && !exp) {
point = true;
} else {
return false;
}
} else if (*s == 'e') {
if (!exp && number && !space) {
exp = true;
number = false;
while (*(s+1) == '+' || *(s+1) == '-') ++s;
} else {
return false;
}
} else if (*s == ' ') {
if (!space) {
space = true;
}
} else {
return false;
}
++s;
}
return number;
}
};</span>