数字空格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.

    分析:此题的确很难,难点在于需要斟酌的情况太多,列举如下:

    1、空格不能涌现在数字之间

    2、点和e最多只能涌现一次

    3、涌现e之前必须有数字

    4、正负号要么涌现在数字的最前面,要么涌现在紧接着e前面

    5、e前面必须还得有数字

    6、正负号最多涌现两次

    代码如下:

    //注意:刚涌现的空格不用计数,直到数字、点、e或者正负号涌现后的空格才需要计数。

    每日一道理
当浮华给予我们过多欺骗,现实中的虚假几乎让我们忘却了真的存在,是真情唤回了迷离的心,是真情带给了我们最纯、最真的感觉,它流露的是美的誓言,渗透的是永恒执著的真爱。

        bool isNumber(const char *s) {
        if(s==NULL)return false;
        int num=0,numdot=0,nume=0,numkg=0,numsign=0;//分别表示数字、点、e、空格以及正负号的个数
        bool flag=false;
        while(*s!='\0')
        {
            if(int(*s-'0')>=0&&int(*s-'0')<=9)
            {
                if(numkg>0)
                {
                    return false;
                }
                flag=false;
                num++;
                s++;
            }
            else
            {
                if(*s=='.')
                {
                    if(numdot>0||numkg>0||nume>0)
                    {
                        return false;
                    }
                    numdot++;
                    s++;
                }
                else
                {
                    if(*s==' ')
                    {
                        if(num!=0||numdot!=0||nume!=0||numsign!=0)
                        {
                            numkg++;
                        }
                        s++;
                    }
                    else
                    {
                        if(*s=='e')
                        {
                            if(num<=0||nume>0||numkg>0)
                            {
                                return false;
                            }
                            s++;
                            nume++;
                            flag=true;
                        }
                        else
                        {
                            if(*s=='+'||*s=='-')
                            {
                                if((nume==0&&num>0)||(nume==0&&numsign>0)||(nume==0&&numdot>0))
                                {
                                    return false;
                                }
                                if(nume==1&&*(s-1)!='e')
                                {
                                    return false;
                                }                        
                                s++;
                                numsign++;
                            }
                            else
                            {
                                return false;
                            }
                        }
                    }
                }

            }
        }
        if(num<=0||flag)
        {
            return false;
        }
        return true;
    }

文章结束给大家分享下程序员的一些笑话语录: 手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值