1,题目要求
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
2,题目思路
对于这道题,要求判断一个给定的数值是否是合法的。
在问题的解决上,我们首先定义三个变量,用来标记正负号、小数点、E/e是否出现过。
-
如果当前字符是E/e,则E/e不能出现在末尾,而且不能存在两个E。
-
如果是第二次出现±号,则一定要出现在E/e之后。
-
如果是第一次出现±号,一定要出现在字符开头或者E/e之后。
-
如果是小数点,则E/e之后不能有小数点,而且小数点不能出现两次。
-
对于数字,一定要是0~9。
3,代码实现
class Solution {
public:
bool isNumeric(char* string)
{
bool sign = false;
bool decimal = false;
bool hasE = false;
int sLen = strlen(string);
for(int i = 0;i<sLen;i++){
if(string[i] == 'e' || string[i] == 'E'){
if(i == sLen-1)
return false;
if(hasE)
return false;
hasE = true;
}
else if(string[i] == '+' || string[i] == '-'){
if(sign && string[i-1]!='e' && string[i-1]!='E')
return false;
if(!sign && i!=0 && string[i-1]!='e' && string[i-1]!='E')
return false;
sign = true;
}
else if(string[i] == '.'){
if(hasE || decimal)
return false;
decimal = true;
}
else if(string[i] < '0' || string[i] > '9')
return false;
}
return true;
}
};