题目描述:
实现一个函数用来判断字符串是否表示数值(包括整数和小数以及使用科学计数法表示的数)。
分析:
表示数值的字符串的规则有:
- 第一个字符只能是’+’ 、’-‘以及数字;
- 数字字符后面只能接’.’或’e’/’E’;
- 小数点后面必须要有字符且只能接数字字符或’e’/’E’;
- ‘e’/’E’后面必须要接字符且只能接数字字符或者’+’ / ‘-‘;
- ‘+’ / ‘-’ 后面必须要接数字字符;
bool func(char *str){
if(str == NULL)
return false;
if(*str == '+' || *str == '-')
++str;
if(*str == '\0')
return false;
funcDigits(*str);
bool ret = true;
if(*str != '\0'){
if(*str == '.'){
funcDigits(&str);
if(*str == 'e' || *str == 'E')
ret = funcExponential(&str);
}else if(*str == 'e' || *str == 'E'){
ret = funcExponential(&str);
}else{
ret = false;
}
}
return ret;
}
void funcDigits(char **str){
while(**str != '\0' && **str >= '0' && **str <= '9')
++(*str);
}
bool funcExponential(char **str){
if(**str != 'e' && **str != 'E')
return false;
++(*str);
if(**str == '+' || **str == '-')
++(*str);
if(**str == '\0')
return false;
funcDigits(str);
return (**str == '\0') ? true : false;
}