class Solution {
public:
bool sacnUnsigned(string s,int& index){ //扫描无符号整数
int start=index;
while(index<s.size() && s[index]>='0' && s[index]<='9')
++index;
return index > start;
}
bool scanInteger(string s,int& index){ //扫描有符号整数
if(s[index]=='+' || s[index]=='-')
++index;
return sacnUnsigned(s,index);
}
bool isNumber(string s) {
if(s.empty()) return false;
int index=0;
while(s[index]==' ') //去除结尾空格
++index;
bool flag =scanInteger(s,index); //扫描开始的数字
if(s[index]=='.'){ // 如果有'.',下面是数字的小数部分
++index;
//1.小数点可以没有整数部分,如.123
//2.小数点后面可以没有数字,如233.
//3.小数点前后都可以有数字,如233.666
flag=sacnUnsigned(s,index) || flag;
}
if(s[index]=='e' || s[index]=='E'){ //若出现'e'或'E',接下来跟着的是数字的指数部分
++index;
//1.当e或E前面没有数字时,整个字符串不能表示数字,如.e1、e1
//2.当e或E后面没有整数时,整个字符串不能表示数字,如12e、12e+5.4
flag=flag && scanInteger(s,index);
}
while(s[index]==' ') //去除结尾空格
++index;
return flag && index==s.size(); //最终是否遍历到结尾且没有出错
}
};
剑指 Offer 20. 表示数值的字符串
最新推荐文章于 2023-07-20 17:42:35 发布