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

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

思路:首先可以推出格式(+-)(num1)(.num2)([Ee](+-)(num3)),其中num123均为1-9的数字串。当Ee存在时,后面的数字才能存在。

    1、使用正则表达式处理

    2、一步一步按格式处理

代码一(正则):

#include <regex>
class Solution {
public:
    bool isNumeric(char* str)
    {
        regex pattern("[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?");
        return regex_match(str, pattern);
    }
};

代码二(模拟):

class Solution {
public:
    bool isNumeric(char* str)
    {
        if(str == nullptr) return false;
        // (+-)(num1)(.num2)[Ee](+-)(num3)
        // 1 最开始的符号位
        if(*str == '+' || *str == '-') str++;
        // 2 num1
        while(*str != '\0')
        {
            if(*str < '0' || *str > '9') break;
            str++;
        }
        // 3 .num2
        if(*str == '.')
        {
            str++;
            // 类似12.是符合要求的
            while(*str != '\0')
            {
                if(*str < '0' || *str > '9') break;
                str++;
            }
        }
        // 4 Ee
        if(*str == 'E' || *str == 'e')
        {
            str++;
            // 类似12e不符合要求
            if(*str == '\0') return false;
            if(*str == '+' || *str == '-') str++;
            while(*str != '\0')
            {
                if(*str < '0' || *str > '9') break;
                str++;
            }
        }
        return *str == '\0';
        
    }
};

 

上一篇:spring ref &history&design philosophy


下一篇:Spring 历史及设计理念