时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路:
设立三个flag:sign,decimal,hasE,分别来标记符号位、小数点、e是否出现
本题涉及到的条件很多,比如第一次出现+-号,且不是在字符串开头,后面要紧跟e,不然,就不符合要求;所以一定要确定+-、.、e三者在本题中何种情况是符合条件的
class Solution {
public:
bool isNumeric(char* string)
{
//标记符号 小数点 e是否出现
bool sign = false,decimal = false,hasE = false;
for(int i =0;i < strlen(string);i++)
{
if(string[i] == 'e' || string[i] == 'E')
{
if(i == strlen(string)-1) return false;
if(hasE) return false;
hasE = true;
}
else if(string[i] == '+' || string[i] == '-')
{
//第二次出现+-符号,则必须要紧贴e之后
if(sign && string[i-1] != 'e' && string[i-1] != 'E')return false;
//第一次出现+-符号,且不是在字符串开头,则也必须紧贴e之后
if(!sign && i > 0 && string[i-1]!='e' && string[i-1] != 'E') return false;
sign = true;
}
else if(string[i] == '.')
{
//e后面不能直接接小数点,小数点不能出现两次
if(hasE || decimal) return false;
decimal = true;
}
else if(string[i]<'0' || string[i]>'9')
return false;
}
return true;
}
};