请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
解:本题是分为多种情况讨论,分为正负号,有无e,有无点.
bool isNumeric(char* string)
{
if(string==NULL)
return false;
bool sign=false,num=false,hasE=false,dot=false;
int len=strlen(string);
for(int i=0;i<len;i++){
if(string[i]=='e'||string[i]=='E'){
// 不能同时存在两个e 或者 e后面跟着数字
if(hasE || i==len-1)
return false;
hasE=true;
}
else if(string[i]=='+'||string[i]=='-'){
// 第二次出现+—号,必须e在第二个正负号前面,比如 -10e-12
if(sign && string[i-1]!='e'&&string[i-1]!='E')
return false;
// 第一次出现+—号,且不在第一位,则e在第一个正负号前面,比如 10e-2
if(!sign && i>0 && string[i-1]!='e'&&string[i-1]!='E')
return false;
sign=true;
}
else if(string[i]=='.'){
// e后面不能接小数点,小数点不能出现两次,比如:-10.001=-10.e3
if(dot || hasE)
return false;
dot=true;
}
else if(string[i]<'0'||string[i]>'9')
return false;
}
return true;
}