剑指offer——面试题54:表示数值的字符串

来源:互联网 发布:h3c交换机端口汇聚 编辑:程序博客网 时间:2024/06/08 15:41

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

    代码:

class Solution {public:    void scanDigits(char** string)    {        while(**string != '\0' && **string >= '0' && **string <= '9')        ++(*string);    }        bool isExponential(char** string)   // 判断 e||E 后面的    {        if(**string != 'e' && **string != 'E')  // 注意是 && ,不是 ||            return false;                ++(*string);        if(**string == '+' || **string == '-')            ++(*string);        if(**string == '\0')  // 如果只有+- 号,没有数字,依然返回 false            return false;                scanDigits(string);        return (**string == '\0')? true : false;    }                bool isNumeric(char* string)    {        if(string == NULL)            return false;        if(*string == '+' || *string == '-')            ++(string);        if(*string == '\0')  // 如果只有+- 号,没有数字,依然返回 false            return false;                bool flag = true;        scanDigits(&string);// 先扫描整数部分        if(*string != '\0')        {            if(*string == '.')  // 如果有小数部分            {                ++ string;                scanDigits(&string);  // 再扫描一下数字                if(*string =='e' || *string == 'E')                    flag = isExponential(&string);            }            else  // 只有整数部分                if(*string =='e' || *string == 'E')                    flag = isExponential(&string);            else                flag = false;        }        return flag && *string == '\0';    }};

    分析:对于一个数值,最前面可能有一个 + - 号,接下来是 0 ~ 9 数字表示整数部分。如果数值是小数,接下来会遇到一个 小数点 . ,如果数值使用科学计数法表示,接下来是一个 e 或者 E,下面紧跟着一个整数(可以有正负号)表示指数。

原创粉丝点击