请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是
。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
注意判断的顺序
注意string的几个函数用法
解答:
class Solution {
public:
bool isNumber(string s) {
int i = s.find_first_not_of(' ');
if(i==string::npos) return false;
int j = s.find_last_not_of(' ');
s = s.substr(i,j-i+1);
if(s.empty()) return false;
int e = s.find('e');
if(e==string::npos){
return judgeFron(s);
}
else{
return judgeFron(s.substr(0,e))&&judgeBeh(s.substr(e+1));
}
}
bool judgeFron(string s){
bool ans = false, point = false;
for(int i=0;i<s.size();i++){
if(s[i]=='+'||s[i]=='-'){
if(i!=0) return false;
}
else if(s[i]=='.'){
if(point) return false;
point = true;
}
else if(s[i]<'0'||s[i]>'9'){
return false;
}
else{
ans = true;
}
}
return ans;
}
bool judgeBeh(string s){
bool result = false;
for(int i=0;i<s.size();i++){
if(s[i]=='+'||s[i]=='-'){
if(i!=0) return false;
}
else if(s[i]<'0'||s[i]>'9'){
return false;
}
else{
result = true;
}
}
return result;
}
};