1. 程式人生 > 實用技巧 >劍指offer-20-表示數值的字串

劍指offer-20-表示數值的字串

思路:

1.先去除首行和行尾空格

2.行首如果有正負號直接忽略

3.如果字串為空或者只有一個‘.’,則不是合法數

4.迴圈真個字串,去掉一下幾種情況

‘.’或者‘e’多於1個

‘.’在e後面出現

e後面或者前面為空,或者e前面緊跟著‘.’

e後面緊跟著正負號,但是正負號後面為空

5.其他情況都合法

程式碼:

class Solution {
public:
    bool isNumber(string s) {
        //去除字串前後空格
        int i=0;
        while(i<s.size() && s[i]==' ') i++;
        int j=s.size()-1;
        while(j>=0 && s[j]==' ') j--;
        if(i>j) return false;
        s=s.substr(i,j-i+1);

        //判斷首行如果有一個正負號直接忽略
        if(s[0]=='-'||s[0]=='+') s=s.substr(1);
        if(s.empty() || s[0]=='.' && s.size()==1) return false;

        //判斷“.”和‘e’的情況

        int dot=0,e=0;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]>='0' && s[i]<='9');
            else if(s[i]=='.')
            {
                dot++;
                if(e || dot>1) return false;
            }
            else if(s[i]=='e' || s[i]=='E')
            {
                e++;
                if(i+1==s.size() || !i || e>1 || i==1&&s[0]=='.') return false;
                if(s[i+1]=='+' || s[i+1]=='-')
                {
                    if(i+2==s.size()) return false;
                    i++;
                }
            }
            else return false;
        }
        return true;
    }
};