题目:

//遇到数字:一定合法
//遇到'.'且合法需要满足条件:之前没出现过'.',之前没出现过'e'
//遇到'e'且合法需要满足条件:之前没出现过'e',之前出现过整数
//遇到'+'或者'-'且合法需要满足条件:位于字符串第一位,或者紧跟在'e'之后  

class Solution {
public:
    bool isNumber(string s) {
        int i=0;
        while(s[i]==' ') i++;      //删除前面所有空格
        if(i>=s.size())  return false;      //排除仅有空格的情况
        s=s.substr(i);                     //用s=s.substr(i)      从第i位开始的子串代替原字符串
        while(s.back()==' '){              //删除末尾所有空格
            s.pop_back();
        }
        bool numFlag=false;
        bool dotFlag=false;
        bool eFlag=false;
        for(int i=0;i<s.size();i++){
            if(isdigit(s[i])){              //遇到数字,用isdigit()函数判断
                numFlag=true;
            }
            else if(s[i]=='.'&&!dotFlag&&!eFlag){       //遇到'.'且合法:之前没出现过'.',之前没出现过'e'
                dotFlag=true;
            }
            else if((s[i]=='e'||s[i]=='E')&&!eFlag&&numFlag){     //遇到'e'且合法:之前没出现过'e',之前出现过数字
                eFlag=true;
                numFlag=false;                     //因为'e'之后至少要有一个数字,所以numFlag=false
            }
            else if((s[i]=='+'||s[i]=='-')&&(i==0||s[i-1]=='e'||s[i-1]=='E')){       //遇到'+'或者'-'且合法:位于字符串第一位,或者紧跟在'e'之后  

            }
            else{                 //其他情况都违法
                return false;        
            }
        }
        return numFlag;           //出现数字并且一直合法,即为数值
    }
};

以上代码转自力扣评论区

posted on 2023-07-19 20:56  孜孜不倦fly  阅读(36)  评论(0)    收藏  举报