题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
思路
/**
* 思路:首先分辨正数负数,是否带符号
判断是否浮点数
----------
在上面两个的基础上:判断是否科学计数法
*/
class Solution {
public:
bool isNumeric(char* string)
{
if(string == NULL) return false;
char flag = '0';
//判断前面是否带符号
if(*string == '+' || *string == '-') string++;
//if(isPositiveInt(string)) return true;
//判断是不是浮点数和科学计数法
while(*string != '\0'){
if(*string == '.') {flag = 'f'; string++; break;}//可能是浮点数
if(*(string+1) != '\0' && ( *string == 'E' || *string == 'e')) {flag = 'e'; string++; break; }//可能是科学计数法
if(*string < '0' || *string > '9') return false;
string++;
}
//如果还没检查完,说明不是整数
if(*string != '\0'){
if(flag == 'e' && (*string == '+' || *string == '-')) string++;
while(*string != '\0'){
if(flag == 'f' && *(string+1) != '\0' && ( *string == 'E' || *string == 'e')) {flag = 'e'; string++; break; }//可能是科学计数法
if(*string < '0' || *string > '9') return false;
string++;
}
}
//如果还没检查完,说明应该是小数点后还出现了e
if(*string != '\0'){
if(flag == 'e' && (*string == '+' || *string == '-')) string++;
while(*string != '\0'){
if(*string < '0' || *string > '9') return false;
string++;
}
}
return true;
}
};