剑指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)
    {
        static bool symbol=1,sign=1,dot=1;;
        if(*string=='\0' && *(string-1)!='\0'){
            symbol=sign=dot=1;return true;}
        else if(*string>='0'&&*string<='9')
            return isNumeric(string+1);
        //判断正负号存在
        else if((*string=='+' || *string=='-') && ((*(string+1)>='0'&&*(string+1)<='9')||*(string+1)=='.') && !(*(string-1)>='0'&&*(string-1)<='9') && symbol){
            symbol=0;return isNumeric(string+1);}
        //判断小数点的存在
        else if(*string=='.' && (*(string+1)>='0'&&*(string+1)<='9') && ((*(string-1)>='0'&&*(string-1)<='9')||(*(string-1)=='+' || *(string-1)=='-')) && dot ){
            dot=0;return isNumeric(string+1);}
        //e存在时
        else if((*string=='e'||*string=='E') && (*(string-1)>='0'&&*(string-1)<='9') && *(string+1)!='\0' && sign){
            symbol=1;sign=0;return isNumeric(string+1);}
        else
            return false;
    }
};

我的笔记:需注意每个if与else的匹配规则,若想并行判断,则需要使用else if 这样可避免一个字符进行多次if判断。

posted @ 2020-05-15 13:58  John_yan15  阅读(170)  评论(0编辑  收藏  举报