请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路:排除法
bool isNumeric(char* string)
{
//排除false的情况,如
//不能有符号+-,e,E,小数点,数字之外的符号
//e或E后必须跟着数字,e或E0或1个
//小数点只有0或1个,e或E后不能有小数点
//+-要么在数字开始0或1个,要么在E或e后第一位0或1个,
bool decimal=false,hasE=false,sign=false;
for(int i=0;i<strlen(string);i++)
{
if(string[i]=='+'||string[i]=='-')
{
if(i==0||string[i-1]=='E'||string[i-1]=='e');
else return false;
}
else if(string[i]=='E'||string[i]=='e')
{
if(i==strlen(string)-1)return false;
if(hasE) return false;
hasE=true;
}
else if(string[i]=='.')
{
if(decimal)return false;
if(hasE) return false;
decimal=true;
}
else{
if(string[i]>'9'||string[i]<'0')
return false;
}
}
return true;
}