文章目录
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
示例1:
输入
"123.45e+6"
返回值
true
示例2:
输入
"1.2.3"
返回值
false
思路:
首先要想到所有的情况,然后进行分类讨论。-123.45e-67
- ± 号后面必定为数字或后面为.(-.123 = -0.123)
- ± 号只出现在第一位或在eE的后一位
- . 后面必定为数字或为最后一位(233. = 233.0)
- eE 后面必定为数字或±号
代码实现:
class Solution {
public:
bool isNumeric(char* str)
{
if(str == nullptr) return false;
if(*str == '+' || *str == '-') ++str;
if(*str == '\0') return false;
int dot = 0, e = 0;
while(*str != '\0'){
if(*str >= '0' && *str <= '9'){
++str;
}
else if(*str == '.'){
if(dot != 0 || e != 0) return false;
++str;
dot = 1;
}
else if(*str == 'e' || *str == 'E'){
if(e != 0) return false;
++str;
e = 1;
if(*str == '+' || *str == '-') str++;
if(*str == '\0') return false;
}
else return false;
}
return true;
}
};