题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
检验首位:必须是‘+’,‘-’,或者数字
遇到 ‘E’ 或 ‘e’,转到 IsSat 处理(检验 ‘E’ 或 ‘e’的下一位)
遇到 ‘.’ ,转到 IsFloat 处理(检验 ‘.’的下一位)
冗长的代码
class Solution {
public:
bool isNumeric(char* string)
{
if(string == NULL) return false;
if(!(*string == '+' || *string == '-' || *string >= '0' && *string <= '9'))
return false;
else if(*string == '+' || *string == '-')
{
string++;
if(!(*string == '.' || *string >= '0' && *string <= '9'))
return false;
else if(*string == '.')
{
IsFloat(string + 1);
}
}
while(*string != '\0')
{
if(!(*string == 'E' || *string == 'e' || *string == '.' || *string >= '0' && *string <= '9'))
return false;
else if(*string == 'E' || *string == 'e')
return IsSat(string + 1);
else if(*string == '.')
return IsFloat(string + 1);
string++;
}
return true;
}
bool IsSat(char* string)
{
if(!(*string == '+' || *string == '-' || *string >= '0' && *string <= '9'))
return false;
else if(*string == '+' || *string == '-')
{
string++;
if(!(*string >= '0' && *string <= '9'))
return false;
}
while(*string != '\0')
{
if(!(*string >= '0' && *string <= '9'))
return false;
string++;
}
return true;
}
bool IsFloat(char* string)
{
if(!(*string >= '0' && *string <= '9'))
return false;
while(*string != '\0')
{
if(!(*string == 'E' || *string == 'e' || *string >= '0' && *string <= '9'))
return false;
else if(*string == 'E' || *string == 'e')
return IsSat(string + 1);
string++;
}
return true;
}
};
调错总结:
(1)没考虑到小数点后面出现‘E’ 或 ‘e’的情况,如 -125.3e6
(2)正负号后面紧跟小数点也是有效的,如 -.123,相当于-0.123。
有时间再改进代码~~