剑指offer:面试题54——表示数值的字符串

博客围绕剑指Offer面试题54,探讨判断字符串是否表示数值(含整数和小数)。给出示例,如'+100'等表示数值,'12e'等不表示。还介绍思路,指出表示数值的字符正则模式,分析时可用if判断,分符号整数、小数、指数格式等部分判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指offer:面试题54——表示数值的字符串

题目:

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

思路:表示数值的字符的正则遵循如下模式:

【符号】整数数值【.【小数数值】】【e或者E【符号】整数数值】

其中【】号为可选部分

因此在分析时候,可以使用if判断,主要分为几部分,判断是否有符号且符合整数格式,判断是否有点并且符合小数格式,判断是否是符合指数格式

class Solution {
public:
    void scanDigit(char** str)
    {
        while(**str>='0'&&**str<='9'&&**str!='\0')
            ++(*str);
    }
public:
    bool isExponential(char** string)
    {
        if(**string!='e'&&**string!='E')
            return false;
        ++(*string);
        if(**string=='+'||**string=='-')
            ++(*string);
        if(**string=='\0')
            return false;
        scanDigit(string);
        return (**string=='\0')?true:false;
    }
public:
    bool isNumeric(char* string)
    {
        if(string==NULL||!strcmp(string,""))
            return false;
        if(*string=='+'||*string=='-')
            ++string;
        if(*string=='\0')
            return false;
        bool numeric=true;
        scanDigit(&string);
        if(*string!='\0')
        {
            if(*string=='.')
            {
                ++string;
                scanDigit(&string);
                if(*string=='e'||*string=='E')
                {
                    numeric=isExponential(&string);   //判断是否是小数
                }
            }
             else if(*string=='e'||*string=='E')
                    numeric=isExponential(&string);
            else
                numeric=false;
           
        }
        return numeric&&*string=='\0';
    }

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值