连接:https://oj.leetcode.com/problems/valid-number/
描述:
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.
解法:
本体Ac不太容易,需要考虑的情况很多。下面给出一些case:
"."
=> false
" e "
=> false
" .1 "
=> ture
" e1 "
=> false
" 1e "
=> false
"-2e+10"
=> true
" 1e-0.1 "
=> false
"-2e+10"
=> true
代码如下:
bool isNumber(const char *s) {
int len = strlen(s);
if( len <= 0) return true;
int index = 0;
bool first = false;
bool second = false;
bool dot = false;
bool end = false;
bool exp = false;
while( index < len && s[index] == ' ')
index++;
if( s[index] == '+' || s[index] == '-')
index++;
if( index == len ) return false;
while( index < len)
{
if( s[index] == ' '){
end = true;
index++;
continue;
}
if( end ) return false;
if( isdigit(s[index] ) )
{
if( !exp )
first = true;
else
second = true;
}else if( s[index] == '+' || s[index] == '-'){
if( !exp || s[index-1] != 'e' && s[index-1] != 'E' ) return false;
}else if( s[index] == 'e' || s[index] == 'E'){
if( exp || !first) return false;
exp = true;
}else if( s[index] == '.'){
if( dot || exp) return false;
dot = true;
}else
{
return false;
}
index++;
}
if( !first )
return false;
else if( exp && !second)
return false;
else
return true;
}