剑指Offer-代码的完整性面试题20:表示数值的字符串

Posted flix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer-代码的完整性面试题20:表示数值的字符串相关的知识,希望对你有一定的参考价值。

题目描述

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

思路

最复杂的数值表示-123.456e-789(其中-可以替换成+或空,e可以替换为E),可以分为3个部分:整数部分-123、小数部分456、指数部分e-789。首先判断整数部分是否正确(0~9组成的字符串,前面可能会有符号‘+‘或者‘-‘);如果有小数点的话判断小数部分是否正确(是否是0~9组成的字符串);如果出现e或者E的话,判断指数部分是否正确(类似于判断整数部分)。代码如下:

class Solution {
public:
    bool isNumeric(char* string)
    {
        if(string==nullptr)
            return false;
        
        bool numeric = scanInteger(&string);
        if(*string=='.')
        {
            string++;
            numeric = scanUnsigenedInt(&string) || numeric; //注意是'||',因为1.,.1,0.1都对
        }
        if(*string=='e'||*string=='E')
        {
            string++;
            numeric = numeric && scanInteger(&string); //注意是'&&',因为1e, e1都不对
        }
        return numeric && *string=='';
    }
    
    bool scanInteger(char** str)
    {
        if(**str=='+'||**str=='-')
            (*str)++;
        return scanUnsigenedInt(str);
    }
    
    bool scanUnsigenedInt(char** str)
    {
        char* before = *str;
        while(**str!=''&&**str>='0'&&**str<='9')
            (*str)++;
        
        return *str>before; //str移动代表存在0~9组成的字符串
    }

};

以上是关于剑指Offer-代码的完整性面试题20:表示数值的字符串的主要内容,如果未能解决你的问题,请参考以下文章

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

剑指Offer-面试案例面试题66:把字符串转为整数

3.剑指Offer --- 高质量的代码

剑指Offer面试题11(Java版):数值的整数次方

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

《剑指offer》面试题20 顺时针打印矩阵 Java版