ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-04-11 19:49:34  阅读:421  来源: 互联网

标签:面试题 return 12e num2 offer ++ Ee str 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';
        
    }
};

 

标签:面试题,return,12e,num2,offer,++,Ee,str,20
来源: https://blog.csdn.net/qq_21899803/article/details/89217514

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有