题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
解法:
思想类似题目49:正则表达式匹配问题。
利用地柜逐个判断当前字符是否符合条件即可。
注意递归写法:1、递归结束条件,2、递归主体部分
代码如下:
bool isNumeric(char* string)
{
if(*string =='\0')
return false;
bool res= true ;
int flag1 = 0; // 记录是否出现了E/e
int flag2 = 0; // 记录是否出现了.
if(*string == '+' || *string == '-')
res = validation(string+1,flag1,flag2);
else
res = validation(string,flag1,flag2);
return res ;
}
bool validation(char* str,int &flag1,int &flag2) // 只能出现 数字,字母 E ,正负号。小数点
{
if(*str == '\0')
return true;
if(*str=='.' ) //首次出现.的情况
flag2++;
if(*str>='0' && *str <= '9')
return validation(str+1,flag1,flag2);
else if(*str == '.' && flag1 == 0 && flag2==1 )
return validation(str+1,flag1,flag2);
else if(*str == 'e' ||*str== 'E' )
{
flag1 = 1;
if(*(str+1) == '+' ||*(str+1) == '-')
return validation(str+2,flag1,flag2);
else if(*(str+1)=='\0')
return false;
else
return validation(str+1,flag1,flag2);
}
else
return false;
}