题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
挑出“不合规则”的更容易一些。
class Solution
{
public:
bool isNumeric(
char *
str)
{
bool hasSign =
false, hasDec =
false, hasE =
false;
for (
int i =
0; i < strlen(str); i++
)
{
if (str[i] ==
'e' || str[i] ==
'E')
{
// e后面一定要接数字
if (i == strlen(str) -
1)
return false;
// 不能同时存在两个e
if (hasE)
return false;
hasE =
true;
}
else if (str[i] ==
'+' || str[i] ==
'-')
{
// 第二次出现sign符号,则必须紧接在e之后
if (hasSign && str[i -
1] !=
'e' && str[i -
1] !=
'E')
return false;
// 第一次出现sign符号,且不是在字符串开头,则也必须紧接在e之后
if (!hasSign && i >
0 && str[i -
1] !=
'e' && str[i -
1] !=
'E')
return false;
hasSign =
true;
}
else if (str[i] ==
'.')
{
// e后面不能接小数点,小数点不能出现两次
if (hasE ||
hasDec)
return false;
hasDec =
true;
}
// 非法字符
else if (str[i] <
'0' || str[i] >
'9')
return false;
}
return true;
}
};
转载于:https://www.cnblogs.com/ruoh3kou/p/10235719.html
相关资源:数据结构—成绩单生成器