题目:

//遇到数字:一定合法
//遇到'.'且合法需要满足条件:之前没出现过'.',之前没出现过'e'
//遇到'e'且合法需要满足条件:之前没出现过'e',之前出现过整数
//遇到'+'或者'-'且合法需要满足条件:位于字符串第一位,或者紧跟在'e'之后
class Solution {
public:
bool isNumber(string s) {
int i=0;
while(s[i]==' ') i++; //删除前面所有空格
if(i>=s.size()) return false; //排除仅有空格的情况
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; //出现数字并且一直合法,即为数值
}
};
以上代码转自力扣评论区
浙公网安备 33010602011771号