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.
class Solution {
public:
bool isNumber(const char *s) {
int len = (int)strlen(s);
int left = 0;
int right = len - 1;
while(' ' == s[left]) ++left;
while(' ' == s[right]) --right;
for(int i = 0; i < len; ++i)
{
if('e' == s[i])
return isNumber(s, left, i-1) && isInteger(s, i+1, right);
}
return isNumber(s, left, right);
}
bool isNumber(const char* s, int start, int end)
{
if(start <= end)
{
int cur = start;
bool hasDot = false;
bool hasDigit = false;
if('+' == s[cur] || '-' == s[cur])
++cur;
for(int i = cur; i <= end; ++i)
{
char ch = s[i];
if(ch >= '0' && ch <= '9')
{
hasDigit = true;
continue;
}
if('.' == ch && !hasDot)
hasDot = true;
else
return false;
}
return hasDigit;
}
return false;
}
bool isInteger(const char* s, int start, int end)
{
if(start <= end)
{
bool hasDigit = false;
if('+' == s[start] || '-' == s[start])
++start;
for(int i = start; i <= end; ++i)
if(s[i] >= '0' && s[i] <= '9')
hasDigit = true;
else
return false;
return hasDigit;
}
}
};