没有那么复杂,只是一个排除法的问题:
(1)+,-只能放在首位或者E,e的后面
(2)E或e,以及小数点只能出现一次,并且:在有E或者e的情况下,小数点不能在E,e后面出现
(3)不能有除了数字,E,e,小数点,+,-之外的其他字符出现
(4)e或E后面必须出现数字,如果后面是+或-,continue,继续判单有没有数字,直到找到为止。
(5)不能是空符号串
代码如下:
class Solution {
public:
bool isNumeric(char* string)
{
int n=strlen(string);
int cnt1=0,cnt2=0,pos1=0,pos2=0,cnt3=0,pos3=0;
if(n==0) return false;
for(int i=0;i<n;i++){
if(string[i]!='e' && string[i]!='E'&&!(string[i]>='0'&&string[i]<='9')&&string[i]!='.'&&string[i]!='+'&&string[i]!='-')
return false;
if(string[i]=='.') cnt1++,pos1=i;
if(string[i]=='e'||string[i]=='E') cnt2++,pos2=i;
if(string[i]=='+'||string[i]=='-') cnt3++,pos3=i;
}
if(cnt2>=2||cnt1>=2||cnt3>=3) return false;
if(pos1>pos2&&cnt2!=0)return false;
if(string[0]=='+'||string[0]=='-') cnt3--;
if(cnt2&&(string[pos2+1]=='+'||string[pos2+1]=='-')) cnt3--;
if(cnt3) return false;
if(cnt2){
int flag=0;
for(int i=pos2+1;i<n;i++){
if(string[i]=='+'||string[i]=='-') continue;
if(string[i]>='0'&& string[i]<='9'){
flag=1;
break;
}
}
if(!flag) return false;
}
return true;
}
};
京公网安备 11010502036488号