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

题目的意思非常简单,就是给一个字符串,判断其输入是否为数字类型。

解题的时候必须要考虑输入的各种类型,给的例子还不够全面 例如

string s1="6e+"; //f
string s2=".e1"; //f
string s3="1.e2"; //t
string s4="4.4e+4.2"; //f
string s4=".e"; //f

通过测试例子可以得到,同时‘.’跟‘e’都不能单独存在,且‘e’前后必须跟有数字,后面数字必须为整数,即‘.’必须在‘e’的前面
同时 ‘.’后面必须接整数,下面的解法比较简单,比较容易出错,暂时也没有想到比较好的方法。通过两个bool变量来保证‘.’和‘e’的有效性(即只出现一次)。

bool isNumber(string s) {
    if(s.size()==0)
    {
        return false;
    }
    //去掉前面的空格
    int start=0;
    for(;s[start]==' ';start++)
    {}
    //去掉后面的空格
    int len=s.size()-1;
    if(start==s.size())
    {
        return false;
    }
    for(;s[len]==' ';len--)
    {}
    if(s[start]=='-'||s[start]=='+')
    {
        start++;
    }
    int is_sci=false;
    int is_float=false;
    for(int i=start;i<=len;i++)
    {
        if(isDigit(s[i]))
        {

        }
        else if(s[i]=='.'&&is_float==false&&start!=len&&is_sci==false)
        {
            if(i>start&&isDigit(s[i-1]))
            {
                is_float=true;
            }
            else if(i<len&&isDigit(s[i+1]))
            {
                is_float=true;
            }
            else{
                return false;
            }
        }
        else if(s[i]=='e'&&is_sci==false&&i!=len&&i!=start)
        {
            if(s[i+1]=='-'||s[i+1]=='+')
            {
                i++;
                if(i==len)
                {
                    return false;
                }
            }
            is_sci=true;
        }
        else
        {
            return false;
        }
    }
    return true;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值