题目:
#遇到数字:一定合法
#遇到'.'且合法需要满足条件:之前没出现过'.',之前没出现过'e'
#遇到'e'且合法需要满足条件:之前没出现过'e',之前出现过整数
#遇到'+'或者'-'且合法需要满足条件:位于字符串第一位,或者紧跟在'e'之后
class Solution {
public:
bool isNumber(string s) {
int i=0;
while(i<s.size()&&s[i]==' '){ #删除前面所有空格
i++;
}
s=s.substr(i); #用s=s.substr(i) 从第i位开始的子串代替原字符串
while(s.back()==' '){ #删除末尾所有空格
s.pop_back();
}
bool numFlag=false;
bool dotFlag=false;
bool eFlag=false;
for(int i=0;i<s.size();i++){
if(isdigit(s[i])){ #遇到数字,用isdigit()函数判断
numFlag=true;
}
else if(s[i]=='.'&&!dotFlag&&!eFlag){ #遇到'.'且合法:之前没出现过'.',之前没出现过'e'
dotFlag=true;
}
else if((s[i]=='e'||s[i]=='E')&&!eFlag&&numFlag){ #遇到'e'且合法:之前没出现过'e',之前出现过数字
eFlag=true;
numFlag=false; #因为'e'之后至少要有一个数字,所以numFlag=false
}
else if((s[i]=='+'||s[i]=='-')&&(i==0||s[i-1]=='e'||s[i-1]=='E')){ #遇到'+'或者'-'且合法:位于字符串第一位,或者紧跟在'e'之后
}
else{ #其他情况都违法
return false;
}
}
return numFlag; #出现数字并且一直合法,即为数值
}
};
标签:满足条件,20,遇到,Offer,合法,字符串
From: https://www.cnblogs.com/fly-smart/p/17566736.html