LCOF劍指offer--面試題20. 表示數值的字符串

請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示數值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
分析:
注意判斷的順序
注意string的幾個函數用法
解答:

class Solution {
public:
    bool isNumber(string s) {
        int i = s.find_first_not_of(' ');
        if(i==string::npos) return false;
        int j = s.find_last_not_of(' ');
        s = s.substr(i,j-i+1);
        if(s.empty()) return false;

        int e = s.find('e');
        if(e==string::npos){
            return judgeFron(s);
        }
        else{
            return judgeFron(s.substr(0,e))&&judgeBeh(s.substr(e+1));
        }
    }

    bool judgeFron(string s){
            bool ans = false, point = false;

            for(int i=0;i<s.size();i++){
                if(s[i]=='+'||s[i]=='-'){
                    if(i!=0) return false;
                }
                else if(s[i]=='.'){
                    if(point) return false;
                    point = true;
                }
                else if(s[i]<'0'||s[i]>'9'){
                    return false;
                }
                else{
                    ans = true;
                }
            }

            return ans;
        }

        bool judgeBeh(string s){
            bool result = false;

            for(int i=0;i<s.size();i++){
                if(s[i]=='+'||s[i]=='-'){
                    if(i!=0) return false;
                }
                else if(s[i]<'0'||s[i]>'9'){
                    return false;
                }
                else{
                    result = true;
                }

            }

            return result;
        }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章