LeetCode 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.

大意就是给你一个字符串判断是否是一个数字。

** 注意**一下三种情况:

  • +1234
  • +123.56
  • +123.48e-10

代码写的太恶心了。wa了好多次!

class Solution {
    bool judgeNumber(string &str, int b, int e)
    {
        bool is = false, res = false;
        for(int i=b; i<e; ++ i)
        {
            if(i == 0 && (str[i] == '-' || str[i] == '+'))
                continue;

            if(str[i] >= '0' && str[i] <= '9')
            {
                res = true;
                continue;
            }

            if(str[i] == '.' && is == false)
                is = true;
            else
                return false;
        }
        return res;
    }

public:
    bool isNumber(string s) {
        
        int e = -1;
        string str;
        for(int i=0; ;)
        {
            while(i < s.size() && s[i] == ' ')
                i ++;
            if(i >= s.size())
                return false;
            while(i < s.size() && s[i] != ' ')
            {
                if(s[i] == 'e')
                    e = str.size();
                str += s[i ++];
            }
            while(i < s.size() && s[i] == ' ')
                i ++;
            if(i < s.size())
                return false;
            break;
        }

        //1. +1234
        //2. -12345.45
        //3. +12345.45e+10

        if(e == -1)
            return judgeNumber(str, 0, str.size());

        bool is = judgeNumber(str, 0, e);
        if(is == false)
            return false;

        is = false;
        for(int i=e+1; i<str.size(); ++ i)
        {
            if(i == e+1 && (str[i] == '-' || str[i] == '+'))
                continue;

            if(str[i] >= '0' && str[i] <= '9')
            {
                is = true;
                continue;
            }

            return false;
        }
        return is;
    }
};

转载于:https://www.cnblogs.com/aiterator/p/6696200.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值