您的位置:首页 > 职场人生

面试题54——表示数值的字符串

2015-08-19 09:56 519 查看

题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: