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.
My Code
class Solution {
public:
bool isRealNumber(string s)
{
int len = s.length();
if (len == 0)
return false;
if (s == "-" || s == "." || s == "+" || s == "-." || s == "+.")
return false;
int i = 0;
if (s[i] == '-' || s[i] == '+')
i++;
int dotCnt = 0;
for (; i < len; i++)
{
if (s[i] == '.')
{
dotCnt++;
if (dotCnt >= 2)
return false;
}
else if (s[i] >= '0' && s[i] <= '9')
continue;
else
return false;
}
return true;
}
bool isInteger(string s)
{
int len = s.length();
if (len == 0)
return false;
if (s == "-" || s == "+")
return false;
int i = 0;
if (s[i] == '-' || s[i] == '+')
i++;
int dotCnt = 0;
for (; i < len; i++)
{
if (s[i] >= '0' && s[i] <= '9')
continue;
else
return false;
}
return true;
}
bool isNumber(string s) {
int len = s.length();
int start = 0;
while (s[start] == ' ' || s[start] == '\t')
start++;
int end = len - 1;
while (s[end] == ' ' || s[end] == '\t')
end--;
s = s.substr(start, end-start+1);
int pos = s.find('e');
if (pos == -1)
{
return isRealNumber(s);
}
else
{
return isRealNumber(s.substr(0, pos)) && isInteger(s.substr(pos + 1));
}
}
};
Runtime: 12 msTestcases
Input | Result |
---|---|
-1e-10 | true |
- | false |
. | false |
.01 | true |
-.01 | true |
1. | true |
-1. | true |
01 | true |
-01 | true |
1e | false |
e1 | false |
e | false |
1e0 | true |