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.
思路:这道题就是思考各种情况,我提交的时候漏过8种非法的数字,才AC了。
class Solution {
public:
bool isNumber(const char *s) {
int len = strlen(s);
int i,j,k;
int point = 0;
int science = 0;
int co = 0;
for(i=0; i<len; ++i)
{
if(s[i] != ' ')
{
if (s[i] == '+' || s[i] == '-')
{
++i;
}
break;
}
}
if (i == len)
{
return false;
}
for(; i<len; ++i)
{
if (s[i] != '.' && s[i] != 'e' && (s[i]-'0'>9 || s[i] -'0'<0) && s[i] != ' ')
{
return false;
}
else if(s[i] == ' ')
{
for(k=i+1; k<len; ++k)
{
if(s[k] != ' ')
{
return false;
}
}
}
else
{
if (s[i] == '.')
{
point++;
if (science > 0)
{
return false;
}
if (i-1>=0 && s[i-1]-'0'>=0 && s[i-1]-'0'<=9)
{
co++;
}
if (i+1<len && s[i+1]-'0'>=0 && s[i+1]-'0'<=9)
{
co++;
}
if (co == 0)
{
return false;
}
}
else if (s[i] == 'e')
{
science++;
if (i+1 >= len || i-1 < 0)
{
return false;
}
if ((s[i+1]-'0'<0 || s[i+1]-'0'>9) && s[i+1]!='+' && s[i+1]!='-')
{
return false;
}
if (s[i+1] == '+' || s[i+1] == '-')
{
if (i+2 >= len)
{
return false;
}
if (s[i+2]-'0'>9 || s[i+2]-'0'<0)
{
return false;
}
i += 2;
continue;
}
if (s[i-1]!='.' && (s[i-1]-'0'<0 || s[i-1]-'0'>9))
{
return false;
}
}
if(point >= 2 || science >= 2)
{
return false;
}
}
}
return true;
}
};