判断给定的字符串是否是数字

217 篇文章 0 订阅
174 篇文章 2 订阅

本题源自leetcoide

--------------------------------------------

思路1:

去除空字符。然后先判断是否为+ 或者 - 然后在判断是否有小数点,再看是否为科学计数法。

1  小数点最多有1 位,

3 e 只能出现在小数点之后切e 后的数字只能是整数。

2 + - 可以出现在首字符或者e 后面的首字符

代码 :

 bool isNumber(const char *s) {
       while(*s==' ')
            s++;
        if(*s=='+'||*s=='-')
            s++;
        int pointNum=0;
        int num=0;
        while(*s>='0' && *s<='9' || *s=='.'){
            *s=='.' ? pointNum++:num++;
            s++;
        }
        if(num<1||pointNum>1)   // 如果小数点的数目大于1  或者数字为0  则不是数字
            return false;
        if(*s=='e'||*s=='E'){   //科学计数法
            s++;
            if(*s=='+'||*s=='-'){
                s++;
            }
            int eNum=0;  // e 后面数字
            while(*s>='0'&&*s<='9'){
                eNum++;
                s++;
            }
            if(eNum==0)
                return false;
        }
        while( *s==' '){
            s++;
        }
        return *s=='\0';       
    }

代码2  正则表达

 public boolean isNumber(String s) {
        return s.matches("(\\s)*([+-])?(([0-9]*\\.)?([0-9]+)|([0-9]+)(\\.[0-9]*)?)([eE][\\+-]?[0-9]+)?(\\s)*");
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值