【题目描述】
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
【思路】
找到通用规律A.B[[E|e]C], A.B表示整数加小数,C表示指数,ABC可能为带符号数,然后具体判断看代码
【代码】
//判断数字
bool isUnsignedInt(char** str)
{
int flag = false;
while(**str != '\0' && **str <= '9' && **str >= '0')
{
(*str)++;
flag = true;
}
return flag;
}
//判断数字符号
bool isInterger(char** str)
{
if(**str == '+' || **str == '-')
(*str)++;
return isUnsignedInt(str);
}
//A.B[[e|E]C]
bool isNumeric(char* str)
{
if(str == nullptr) return false;
bool number = isInterger(&str);
if(*str == '.')
{
str++;
number = isUnsignedInt(&str) || number;
}
if(*str == 'e' || *str == 'E')
{
str++;
//小数点可以没有整数部分, .B
//小数点也可以没有小数部分, A.
//两者均有A.B
number = number && isInterger(&str);
}
return number && *str == '\0';
}