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.
Update (2015-02-10):
The signature of the C++
function had been updated. If you still see your function signature accepts a const char *
argument, please click the reload button to reset your code definition.
Solution:
class Solution {
public:
bool isNumber(string s) {
int head = 0, tail = s.length()-1;
bool e, dot, num;
e = dot = num = false;
while(s[head++] == ' ' && head <= tail) ;
head--;
while(s[tail--] == ' ' && tail >= head) ;
tail++;
if(head > tail) return false;
if(s[head] == '+' || s[head] == '-') head++;
for(int i = head; i <= tail; ++i)
{
if(s[i] == 'e' || s[i] == 'E')
{
if(e || !num || i == tail) return false;
e = true;
}
else if(s[i] >= '0' && s[i] <= '9')
{
num = true;
}
else if(s[i] == '.')
{
if(e || dot || (!num && i == tail)) return false;
dot = true;
}
else if(s[i] == '+' || s[i] == '-')
{
if((s[i-1] != 'e' && s[i-1] != 'E') || i == tail) return false;
}
else return false;
}
return true;
}
};