题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
先要搞清楚哪些是表示数值,除了列出来的,'1.2e+2','.1'也是数值,'12e',‘12.’ 就不是数值
class Solution {
public:
bool isNumeric(char* string) {
if (string == NULL)
return false;
if (*string == '+' || *string == '-')
++string;
scanNum(&string);
if (*string == '\0')
return true;
//判断小数
if (*string == '.') {
++string;
if (*string == '\0')//小数点后面没有数字
return false;
scanNum(&string);
if (*string == '\0')//小数点后面只有数字
return true;
else if (*string == 'e' || *string == 'E')//小数点后面有指数
return isExp(&(++string));
}
//判断指数
else if (*string == 'e' || *string == 'E') {
return isExp(&(++string));
}
return false;
}
//扫描数字
void scanNum(char** str) {
while (**str!='\0'&&**str >= '0'&&**str <= '9')
++(*str);
}
//判断是不是指数
bool isExp(char** str){
if(**str=='\0')
return false;
if(**str=='+'||**str=='-'){
++(*str);
if(**str=='\0')
return false;
}
scanNum(str);
if(**str=='\0')
return true;
else
return false;
}
};