题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
表示数值的字符串遵循:
[sign]intergal-digits[.[fractional-digits]][e|E[sign]exponential-digits],([]表示可选)
class Solution {
public:
bool isNumeric(char* string)
{
if(string == NULL)
return false;
if(*string == '+' || *string == '-')
string++;
if(*string == '\0')
return false;
scanDigit(&string);
bool flag = true;
if(*string != '\0')
{
if(*string == '.')
{
string++;
scanDigit(&string);
if(*string == 'e' || *string == 'E')
flag = isE(&string);
}
else if(*string == 'e' || *string == 'E') //整数
flag = isE(&string);
else
flag = false;
}
return flag && (*string == '\0'); //此处考虑1.2.3这个例子就知道为什么要加后一项
}
void scanDigit(char **string)
{
while(**string != '\0' && **string >='0' && **string <='9')
++(*string);
}
bool isE(char **string)
{
++(*string);
if(**string == '+' || **string == '-')
++(*string);
if(**string == '\0')
return false;
scanDigit(string);
return (**string == '\0') ? true : false;
}
};