請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如,字符串"+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;
}
};