表示数值的字符串

写在前面

剑指offer:表示数值的字符串

题目要求

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

解法

class Solution {
public:
    bool isNumeric(char* string)
    {
        if(*string=='\0') return false;
        if(string[0]=='-'||string[0]=='+')
            return isNumber(string+1,0);
        return isNumber(string,0);
    }

    bool isNumber(char* string,int tag) {
        if(*string=='\0') return false;
        int n = strlen(string);

        for(int i=0;i<n;++i) {
            if(string[i]=='e'||string[i]=='E') {
                if(string[i+1]=='\0') return false;
                else if(string[i+1]=='+'||string[i+1]=='-')
                    return isnumber(string+i+2);
                else if(string[i+1]>='0'&&string[i+1]<='9')
                    return isnumber(string+i+1);
                else return false;
            }
            else if(string[i]=='.'&&!tag) {
                tag = 1;
                return isNumber(string+i+1,tag);
            }
            else if(string[i]=='+'||string[i]=='-')
                return false;
            else if(string[i]>='0'&&string[i]<='9')
                continue;
            else return false;
        }
        return true;
    }

    bool isnumber(char* str) {
        int n = strlen(str);
        if(!n) return false;
        for(int i=0;i<n;++i) {
            if(str[i]>='0'&&str[i]<='9')
                continue;
            else return false;
        }
        return true;
    }
};

分析:这道题目就是处理字符串的一个细节题目,包含多重的条件判断和嵌套情况。
首先,需要注意过滤掉最开始的+-号,我通过一个外层函数进行过滤。
其次,重点就在于处理到e/E以及处理到 . 的时候这两种特殊情况。
当处理到e/E的时候显然后面的字符串必然得是一个纯数字(过滤掉符号),只需要交给isnumber处理即可。
当处理到 . 的时候发现后面可以是一个纯数字也可以是一个不带 . 的科学计数法表示的数字,所以给定一个变量tag标识当前是不是处理过 . ,如果处理过了再次遇到就return false,如果第一次遇到 . 就直接递归判断后续的字符串。

全部评论

相关推荐

不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
评论
4
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务