字符串处理
leetcode上精简的题解方法。
.出现正确情况:只出现一次,且在e的前面e出现正确情况:只出现一次,且出现前有数字+和-出现正确情况:只能在开头和e后一位
class Solution {
public:
bool isDigital(char x){
return x >= '0' && x <= '9';
}
bool validNumber(string s) {
if(s.size() == 0) return false;
int len = s.size();
int i = 0;
// 前导空格和尾部空格先删了
while(i < len && s[i] == ' ' ) i++;
s = s.substr(i);
while(!s.empty() && s.back() == ' ') s.pop_back();
len = s.size();
bool dotFlag = false;
bool eFlag = false;
bool numFlag = false;
for(i = 0; i < len; i++){
if(isDigital(s[i])){
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后必须跟一个整数 所以e之后numFlag要重新reset
}else if((s[i] == '+' || s[i] == '-') && (i == 0 || s[i-1] == 'e' || s[i-1] == 'E')){
continue;
}else{
return false;
}
}
return numFlag;
}
};