题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
解题思路:
这道题没什么别的技巧,按照数值的表示规则,逐个扫描字符串,看是否符合要求。
数值有如下几种情况:
1、正负数,首位可以有‘+’ 和 ‘-’ 符号;
2、小数
3、科学计数法,符号‘e’ 或 ‘E’ ,注意 e 或 E 之后只能是整数(可以有正负数)
实现细节见代码
实现代码:
<span style="font-size:18px;">
class Solution {
public:
bool isNumeric(char* string)
{
if(string == nullptr)
return false;
if(*string == '+' || *string == '-')
string++;
if(*string == '\0')
return false;
bool isNum = true;
scanDigits(&string);
if(*string != '\0')
{
if(*string == '.')
{
++string;
scanDigits(&string);
if(*string == 'e' || *string == 'E')
isNum = isExp(&string);
}
else if(*string == 'e' || *string == 'E')
isNum = isExp(&string);
else
isNum = false;
}
return isNum && (*string == '\0');
}
void scanDigits(char **str)
{
while(**str != '\0' && **str >= '0' && **str <= '9')
++(*str);
}
bool isExp(char **str)
{
if(**str != 'e' && **str != 'E')
return false;
++(*str);
if(**str == '+' || **str == '-')
++(*str);
if(**str == '\0')
return false;
scanDigits(str);
return (**str == '\0') ? true : false;
}
};
</span>