题目
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.
**
求解过程
**
本题即要判断给定字符串是否为一有效的数值型数据;
测试用例又有太多种情况要考虑;
代码段 cpp:
class Solution {
public:
bool isValidChar(char c)
{
if(isdigit(c))
{
return true;
}
else if(c=='.'||c=='e'||c=='+'||c=='-')
{
return true;
}
else
{
return false;
}
}
bool isNumber(string s) {
if(s.size()==0)
{
return false;
}
int i = 0;
int start = 0;
int end =s.size() - 1;
while(start<s.size()&&s[start]==' ')
{
start++;
}
while(end>=0&&s[end]==' ')
{
end--;
}
if(start > end)
{
return false;
}
bool havePoint = false;
bool havenum = false;
bool havee = false;
int start_i = start;
for(i = start;i <= end;i++)
{
if(!isValidChar(s[i]))
{
return false;
}
if(s[i]=='+'||s[i]=='-')
{
if(i!=start_i)
{
return false;
}
}
if(s[i]=='.')
{
if(havePoint)
{
return false;
}
else
{
havePoint = true;
}
}
if(isdigit(s[i]))
{
havenum = true;
}
if(s[i]=='e')
{
havee = true;
i++;
break;
}
}
if(!havenum)
{
return false;
}
if(!havee)
{
return true;
}
//检查字符‘e’后的字符串
start_i = i;
havenum = false;
for(;i<=end;i++)
{
if(!isValidChar(s[i]))
{
return false;
}
if(s[i]=='+'||s[i]=='-')
{
if(i!=start_i)
{
return false;
}
}
if(isdigit(s[i]))
{
havenum = true;
}
if(s[i]=='.'||s[i]=='e')
{
return false;
}
}
if(havenum)
{
return true;
}
else
{
return false;
}
}
};