剑指offer20:表示数值的字符串
作者:互联网
class Solution {
public:
int loc=0;
bool isNumber(string s) {
int len=s.size();
while(loc<len&&s[loc]==' ') ++loc;
if(loc==len) return false;
bool numeric=scanSignNum(s);
//不会越界
if(s[loc]=='.')
{
++loc;
numeric = scanUnsignedNum(s)||numeric;
}
if(loc<len && (s[loc]=='e'||s[loc]=='E'))
{
++loc;
numeric=numeric&&scanSignNum(s);
}
while(loc<len && s[loc]==' ')
{
++loc;
}
return numeric && loc==len;
}
bool scanUnsignedNum(string &s)
{
int len=s.size();
int tmp=loc;
while(loc<len&&s[loc]>='0'&&s[loc]<='9')
{
++loc;
}
return loc>tmp;
}
bool scanSignNum(string &s)
{
if(s[loc]=='+'||s[loc]=='-')
{
++loc;
}
return scanUnsignedNum(s);
}
};
一点小心得:
1.将检测整数作为一个功能抽取出来,其余的根据题干做分析
2.没有考虑到“1 4” 所以在isNumber最后return前加了个while
3.在对第一部分的小数判断的时候要用
这里的顺序挺重要的,考虑到||运算的短路,顺序不可以反过来,这是在测试“0.8”时debug出来的
4.两个if里边的逻辑关系要弄清楚
标签:loc,return,string,int,offer20,数值,bool,字符串,isNumber 来源: https://blog.csdn.net/weixin_46266058/article/details/122378089