题目大意:给出一个字符串,判断它是不是合法数字
分析:数学考察。要全面考虑清楚什么情况下才属于合法数字:
1.数字前后都可以有空格,但中间不允许有
2.数字前面可以出现正负号
3.小数点'.'只能出现一次,前面可以没有数字
4.符号'e'只能出现一次,且e后面不能出现小数点,可以出现正负号
5.除了上面提到的字符,只允许出现'0'~'9'中的字符
代码:
class Solution {
public:
bool isNumber(string s) {
bool eflag = false; //是否出现e
bool dotflag = false; //是否出现小数点
bool digitflag = false; //是否出现数字
int i = 0;
while(s[i] == ' ') // 跳过前导空格
i++;
if(s[i] == '+' || s[i] == '-') // 处理正负号
i++;
while(i < s.size()){
if(s[i] == '.' && !dotflag){ // '.'不能出现2次,'.'前面可以没有数字
dotflag = true;
i++;
}
else if(s[i] == 'e' && !eflag && digitflag){ // 'e'不能出现2次,'e'前面必须有数字
dotflag = true; // 'e'后面不能出现'.'
eflag = true;
i++;
if(i < s.size() && (s[i] == '+' || s[i] == '-')) i++; //'e'后面可以有正负号
if(i <= s.size() && !(s[i] >= '0' && s[i] <= '9')) return false; //'e'后面必须有数字
}
else if(s[i] >= '0' && s[i] <= '9'){
i++;
digitflag = true;
}
else break;
}
while(s[i] == ' ') i++;
if(i == s.size() && digitflag) return true;
else return false;
}
};