1.题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
2.问题分析
其实问题不是很复杂,只是需要考虑完整,需要对每一个字符进行判断,判断是否是数字,是否是逗号,是否是字符’e’或者’E’。如果有字符’e’或者’E’,那么数字就被e分成了两部分,前一部分数可以有逗号,后一部分数没有逗号。具体分析见代码:
3.源代码
bool isNumeric(char* string)
{
if(string == NULL || *string == '\0')
return false;
int index = 0;
//处理第一个字符是否'*'或者'-'
if(string[index] == '+' || string[index] == '-')
++index;
//一个数只能有一个小数点
bool douhao = true;
//'e'或者'E'把一个数分成两部分,如果字符串中有'e'或者'E',那么可能有第二部分
bool secondPart = false;
while(string[index] != '\0' )
{
char c = string[index];
if(c == '.')
{
//只有一个逗号
if(douhao)
{
++index;
douhao = false;
}
//有两个逗号则不是数字
else
{
return false;
}
}
//是数字,则进行下一位判断
else if(isdigit(c))
{
++index;
}
//是'e'或者'E',那么进行第二部分判断
else if(c == 'e' || c == 'E')
{
++index;
secondPart = true;
break;
}
//非逗号,非数字,非'e'或者'E',则不是数字,返回false
else
{
return false;
}
}
//第二部分判断
if(secondPart)
{
//处理第一个字符是否'*'或者'-'
if(string[index] == '+' || string[index] == '-')
++index;
//看是否还有下一位
if(string[index] == '\0')
return false;
while(string[index] != '\0')
{
if(!isdigit(string[index]))
return false;
++index;
}
}
return true;
}