题目思路
代码
cpp
class Solution {
public:
bool isNumber(string s) {
int l = 0, r = s.size() - 1;
// 1.忽略前后的空格
while(l <= r && s[l] == ' ') l++;
while(l <= r && s[r] == ' ') r--;
if(l > r) return false;
s = s.substr(l,r - l + 1); // 区间左闭右开
// 2.判断其实是否为符号
if(s[0] == '+' || s[0] == '-') s = s.substr(1);// s = 提取到[1,end)
if(s.empty()) return false;
// 3. (.e或者只有.)是错误的
if(s[0] == '.' && (s.size() == 1 || s[1] == 'e' || s[1] == 'E')) return false;
// e后面必必须是整数,且不能什么都没有
int dot = 0, e = 0; // .个数于e个数
for(int i = 0; i < s.size(); i++){
if(s[i] == '.'){
// .个数大于1,或者.出现在e后面
if(dot > 0 || e > 0) return false;
dot++;
}else if(s[i] == 'e' || s[i] == 'E'){
// e的前后不能什么都没有,e只能出现一次
if(!i || i + 1 == s.size() || e > 0) return false;
// e后面跟符号,符号后不能什么都没有
if(s[i + 1] == '+' || s[i + 1] == '-'){
if(i + 2 == s.size()) return false;
i++; // 不要在判断符号了
}
e++;
}else if(s[i] < '0' || s[i] > '9') return false;
}
return true;
}
};