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

题目描述

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

思路

面向测试用例程序设计

考虑不符合数值的特征:
1.除e或E之外的其他字母
2.e或E有多个
3.有多个小数点,或者小数点出现在e或E之后
3.正负号出现在非首部或者非e后面
总体思路就是这样,在实现的时候需要考虑判断顺序。
1.判断0和9的数字是最简单的,放在最后判断
2.考虑有无e或者E才方便判断小数点和正负号在不在e后面,因此先对e进行判断

实现

class Solution {
public:
    bool isNumeric(string str) {
        // write code here
        bool p_n=0,point=0,has_e=0;
        int len=str.length();
        
        for (int i=0;i<len;i++)
        {
             if (str[i]=='e'||str[i]=='E')
            {
                if (has_e||i==len-1)//如果已经有e了,或者e出现在字符串末尾,返回false
                    return 0;
                else//否则就把e的标志位置为1
                    has_e=1;
            }
            else if (str[i]=='.')
            {
                if (point||has_e)如果有小数点了,或者有e了(代表此时的小数点出现在e后面),返回false
                    return 0;
                else//否则把小数点标志置1
                    point=1;
            }
            else if (str[i]=='-'||str[i]=='+')
            {
                if (p_n&&(str[i-1]!='e'&&str[i-1]!='E')) return 0;//如果有正负号了,并且此时的正负号前面一个不是e,返回false
                else if (p_n==0&&i!=0&&(str[i-1]!='e'&&str[i-1]!='E')) return 0;//如果没有正负号,并且此时的正负号出现不是在头部,并且前面也没有e,返回false
                else p_n=1;//否则正负号标志置1
            }
            else if (str[i]<'0'||str[i]>'9')//上面判断过之后,出现09以外的,返回false
                return 0;
        }
        return 1;//测试都通过,返回true
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值