剑指offer20
之前做的时候思路比较乱,重新总结一波;
按题目要求,字符串表示为数字有以下几个规则:
1.首尾的空格必须去掉,不影响结果;
2.+或者- 必须出现在第一位,或者e/E的后面一位;
3.e
和.
只能出现一次;
4.e/E
后面必须有数字;
5. .
面不能有e/E
;
不满足以上条件的就是非法数字,直接返回false;
class Solution {
public:
bool isNumber(string s) {
if(s.size()==0)return false;
auto l=removeSpace(s);
bool numf=false,dotf=false,ef=false;
for(int i=l;i<s.size();++i)
{
if(isdigit(s[i]))
{
numf=true;
}
else if(s[i]=='.'&&!dotf&&!ef)
{
dotf=true;
}
else if((s[i]=='e'||s[i]=='E')&&!ef&&numf)
{
ef=true;
numf=false;
}
else if((s[i]=='+'||s[i]=='-')&&(i==l||s[i-1]=='e'||s[i-1]=='E'))
{
}
else return false;
}
return numf;
}
int removeSpace(string &s)
{
int l=0,r=s.size()-1;
while(l<s.size()&&s[l]==' ')
++l;
while(r>=0&&s[r]==' ')
{
s.pop_back();
--r;
}
return l;
}
};