Description
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
Solution
划水划水
记录一下wa了12次的题!!!
这题建议是真的真的很无聊才去做!!!
AC Code
无参考价值
class Solution {
public:
bool isNumber(string str) {
string s;
int l=0,r=str.length()-1;
for(int i=0;i<str.length();i++){
if(str[i]!=' '){
l=i;break;
}
}
s=str.substr(l);
for(int i=s.length()-1;i>=0;i--){
if(s[i]!=' '){
r=i;break;
}
}
s=s.substr(0,r+1);
for(int i=0;i<s.length();i++) {
if(s[i]=='E') s[i]='e';
}
int num=0;
if(s.length()==1&&(s[0]<'0'||s[0]>'9')) return 0;
if(count(s.begin(),s.end(),'.')>1) return 0;
if(count(s.begin(),s.end(),'e')>1) return 0;
if(count(s.begin(),s.end(),'+')>2) return 0;
if(count(s.begin(),s.end(),'-')>2) return 0;
if(s[0]!='.'&&s[0]!='+'&&s[0]!='-'&&(s[0]<'0'||s[0]>'9')) return 0;
if((s[s.length()-1]<'0'||s[s.length()-1]>'9')&&s[s.length()-1]!='.') return 0;
if(num==0&&(s[0] >= '0' && s[0]<='9')) num=1;
int e=0;
for(int i=1;i<s.length();i++){
if(num==0&&(s[i] >= '0' && s[i]<='9')) num=1;
if ((s[i] < '0' || s[i]>'9') && s[i] != '.' && s[i] != 'e' && s[i] != 'E'&&s[i]!='+'&&s[i]!='-') return 0;
else if(s[i]=='e'||s[i]=='E') {
if(num==0) return 0;
e=1;
}
else if(e==0&&(s[i]=='-'||s[i]=='+')) return 0;
else if(e==1&&s[i]=='.') return 0;
else if(i==s.length()-1&&s[i]=='.'&&num==0) return 0;
}
return 1;
}
};