65. 有效数字

自己做
解:逐个检查各位置

cpp
class Solution {
public:
bool isNumber(string s) {
int begin = 0; //检查起始
int int_len = 0; //整数部分长度
int float_len = 0; //小数部分长度
if(s[0] == '-' || s[0] == '+') //符号位存在,整数部分起始位置调整为从1开始
begin++;
//检查整数位
while(begin < (int)s.size() && s[begin] != '.' && s[begin] != 'e' && s[begin] != 'E'){
if(s[begin] > '9' || s[begin] < '0') //如果整数位出现了非数字,说明这不是一个正确的数字
return false;
begin++;
int_len++;
}
//检查小数位(如果有)
if(begin < (int)s.size() - 1 && s[begin] == '.'){
begin++; //小数位起始
while(begin < (int)s.size() && s[begin] != 'e' && s[begin] != 'E'){
if(s[begin] > '9' || s[begin] < '0') //如果小数位出现了非数字,说明这不是一个正确的数字
return false;
begin++;
float_len++;
}
}
if(int_len == 0 && float_len == 0) //如果整数部分和小数部分都为空,说明这不是一个正确的数字
return false;
//检查指数位(如果有)
if(begin < (int)s.size() && (s[begin] == 'e' || s[begin] == 'E')){
begin++; //指数位起始
if(begin == (int)s.size()) //如果不存在指数位,说明这不是一个正确的数字=>排除"1e"的情况
return false;
if(s[begin] == '-' || s[begin] == '+') //符号位存在,指数部分起始位置调整
begin++;
if(begin == (int)s.size()) //如果不存在指数位,说明这不是一个正确的数字=>排除"1e+"的情况"
return false;
while(begin < (int)s.size()){
if(s[begin] > '9' || s[begin] < '0') //如果小数位出现了非数字,说明这不是一个正确的数字
return false;
begin++;
}
}
return true;
}
};
