剑指offer----表示数值的字符串

题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。

//分解问题,有e的话,判断e(E)的两边是不是数字,没e的话,直接判断整个字符串
//是不是数字,有多个e则以第一个e把字符串划分为两半
class Solution {
public:
//判断划分后的字符是不是数字
    bool sub_is_num(string str)
    {
        if(str.size()==0)return false;
        //判断第一个是否是符号位,如果是则去掉
        if(str[0]=='+'||str[0]=='-')
        {
            str=str.substr(1);
        }
        //定义一个标记mark,如果已经有一个小数点,当前字符也是小数点,则一定不是
        //一个数字
        bool mark=false;
        for(auto m:str)
        {
            if(m=='.')
            {
               if(mark==false)mark=true;
                else return false;
                continue;
            }
            //如果不为数字且不为小数点,则一定不是数字
            if(m<'0'||m>'9')return false;
        }
        //成功避开了所有不是数字的条件判断,那一定是个数字
        return true;
    }
    bool isNumeric(char* string1)
    {
        if(*string1=='\0')return false;
        //以第一个e(E)分割字符串为两半
        int mark_i=0;
        while(string1[mark_i]!='\0')
        {
            if(string1[mark_i]=='e'||string1[mark_i]=='E')break;
            ++mark_i;
        }
        if(string1[mark_i]=='\0')
        {
            return sub_is_num(string1);
        }
        else
        {
            string mark_string(string1);
            string str1(mark_string.begin(),mark_string.begin()+mark_i),str2(mark_string.begin()+mark_i+1,mark_string.end());
            //如果分成两半的字符串中的第二个字符串中含有'.',那整个字符串一定不是数字
            for(auto m:str2)
            {
                if(m=='.')return false;
            }
            return sub_is_num(str1)&&sub_is_num(str2);
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值