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

思路都在代码中!

bool isNumeric(const char* string) {
    // 如果第一个字符不是 +、- 、[0-9]直接返回false
    if (!(isdigit(*string)
        || *string == '+' 
        || *string == '-')) {
        return false;
    }

    // 第一个字符符合题意,接着往下走
    ++string;

    // poilt 作为小数点的计数
    // 如果大于 1 则返回false 
    // 因为整个部分最多只可以出现一个小数点
    int poilt = 0;

    // 该循环的结束条件就是:
    // (1)遇到 字符e、E   例:+123e   -12.34E
    // (2)是一个正常的数字 例:123  +12.2   -12.3
    while (*string != '\0' && *string != 'e' && *string != 'E') {
        if (*string == '.') {
            // 出现小数点便加1
            poilt++;
        }
        // 如果小数点个数 > 1 或者当前字符不是数字或小说点则返回false
        if ((poilt > 1) || !(isdigit(*string) || *string=='.')) {
            return false;
        }
        ++string;
    }

    //这里我们需要判断上一个while 循环跳出的原因是什么?
    if (*string != '\0') {
        // 遇到了e
        ++string;
    }
    else {
        // 是一个正常的数字
        return true;
    }
    // 在 e 后面如果出现了 +、- 符号则直接跳过即可
    if (*string == '-' || *string == '+') {
        ++string;
    }

    // 如果是数字则进行判断
    if (isdigit(*string)) {
        // 此时后面的字符必须全部都是数字,否则返回false
        while (*string != '\0') {
            if (!isdigit(*string)) {
                return false;
            }
            ++string;
        }
        return true;
    }
    else {
        // 如果e 后面不是数字,不满足要求
        return false;
    }
}

累死累活写了这么多,但是看到有的人python解题,我瞬间崩溃了
有时候找对方法还是关键啊!!!

def isNumeric(self, s):
    try :
        p = float(s)
        return True
    except:
        return False

这里特别巧妙,就是利用了float函数,它的作用就是将一个整数或者字符串转换为浮点数,这里再结合异常的判断,简直是鬼斧神工!

如果报了异常,就说明无法转换,那它就不是一个合理的浮点数,返回false,反之如果没有异常说明是符合题意的!

当然还有一种逆天的解法就是:正则表达式

return re.match(r"^[\+\-]?[0-9]*(\.[0-9]*)?([eE][\+\-]?[0-9]+)?$",s)

我要打人了!别拦我~[图片说明 ]

虽然说C++效率高,但是别的语言太欺负人了

哎,多学一点总归有好处的!

```
^[+-]?[0-9](.[0-9])?([eE][+-]?[0-9]+)?$

?代表的是可以出现0次或一次

  • 代表可以出现1次以上,但是不能是0次
    . 代表匹配一个小数点
    正则表达式总归来看,还是比较简单的!至于match是python中正则表达式的库函数