其他分享
首页 > 其他分享> > 剑指offer20:表示数值的字符串

剑指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