题目:
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.
注意点:1. 有小数点的情况下前后总共只需1个数字,如".3"、"3."都是合法的;
2. 有e的情况下,前后都至少有一个数字,而且e的后面只能是整数,而不能再有小数点。
分析参考:http://www.cnblogs.com/tgkx1054/archive/2013/05/22/3092693.html
class Solution {
public:
bool isNumber(const char *s) {
//跳过前面的空格
while (*s == ' ')
s++;
if (*s == '+' || *s == '-')
s++;
//只含有空格
if (*s == 0)
return false;
const char *s2 = s + strlen(s) - 1;
while (*s2 == ' ')
s2--;
//s1,s2分别表示新的首尾指针
const char *s1 = s;
int dot = 0;
int e = 0;
int num = 0;
while (s1 <= s2) {
if (isdigit(*s1)) {
s1++;
num++;
}
else if (*s1 == '.' && e == 0) {
s1++;
dot++;
}
else if (*s1 == 'e' && e == 0 && num >= 1) {
if (isdigit(*(s1 + 1))) {
e++;
s1 += 2;
num++;
}
else if ((s1 + 2 <= s2) && (*(s1 + 1) == '+' || *(s1 + 1) == '-')) {
e++;
s1 += 2;
}
else
return false;
}
else
return false;
}
if (dot <= 1 && e <= 1 && num >= 1)
return true;
return false;
}
};