65. Valid Number

本文提供了一个方法来验证给定的字符串是否为数值,包括整数、小数、科学计数法等。详细解释了如何通过字符串操作判断字符串是否符合数值的规则。

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

class Solution {
public:
    bool isNumber(string s) {
        //trim
        s.erase(0,s.find_first_not_of(" "));
        s.erase(s.find_last_not_of(" ") + 1);
        int len = s.length();
        if(len==0) return false;
        bool dotFlag = false;
        bool eFlag = false;
        
        //check first letter
        if((s[0] < '0' || s[0] > '9') && s[0]!='+' && s[0]!='-' && s[0]!='.') return false;
        if(s[0]=='.') dotFlag = true;
        
        //check rest letters
        for(int i = 1; i < len; i++){
            if((s[i]=='+' || s[i]=='-') && s[i-1]=='e') continue; 
            if(s[i]=='.' && !dotFlag && !eFlag) {
                dotFlag = true;
                continue;
            }
            if(s[i]=='e'&& !eFlag){
                eFlag = true;
                if(s[i-1]=='.' && i >= 2 && (s[i-2]>= '0' && s[i-2] <= '9')) continue;
                if (s[i-1]!='-' && s[i-1]!='+' && s[i-1]!='.') continue;
            } 
            if(s[i]>='0' && s[i] <='9') continue;
            return false;
        }
        
        //check last letter
        if(s[len-1]=='e' || s[len-1]=='+' || s[len-1]=='-' ){
            return false;
        }
        if(s[len-1]=='.' && ((len >= 2 && (s[len-2]< '0' || s[len-2] > '9')) ||len==1)) return false;
        return true;
    }
};

 

转载于:https://www.cnblogs.com/qionglouyuyu/p/4928632.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值