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

题目描述

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

检验首位:必须是‘+’,‘-’,或者数字

遇到 ‘E’ 或 ‘e’,转到 IsSat 处理(检验 ‘E’ 或 ‘e’的下一位)

遇到 ‘.’ ,转到 IsFloat 处理(检验 ‘.’的下一位)

 

冗长的代码

class Solution {
public:
    bool isNumeric(char* string)
    {
        if(string == NULL) return false;
        if(!(*string == '+' || *string == '-' || *string >= '0' &&  *string <= '9'))
            return false;
        else if(*string == '+' || *string == '-')
        {
            string++;
            if(!(*string == '.' || *string >= '0' &&  *string <= '9'))
                return false;
            else if(*string == '.')
            {
                IsFloat(string + 1);
            }
        }
        while(*string != '\0')
        {
            if(!(*string == 'E' || *string == 'e' || *string == '.' || *string >= '0' &&  *string <= '9'))
                return false;
            else if(*string == 'E' || *string == 'e')
                return IsSat(string + 1);
            else if(*string == '.')
                return IsFloat(string + 1);
            string++;
        }
        return true;
    }
    bool IsSat(char* string)
    {
        if(!(*string == '+' || *string == '-' || *string >= '0' &&  *string <= '9'))
            return false;
        else if(*string == '+' || *string == '-')
        {
            string++;
            if(!(*string >= '0' &&  *string <= '9'))
                return false;
        }
        while(*string != '\0')
        {
            if(!(*string >= '0' &&  *string <= '9'))
                return false;
            string++;
        }
        return true;
    }
    bool IsFloat(char* string)
    {
        if(!(*string >= '0' &&  *string <= '9'))
                return false;
        while(*string != '\0')
        {
            if(!(*string == 'E' || *string == 'e' || *string >= '0' &&  *string <= '9'))
                return false;
            else if(*string == 'E' || *string == 'e')
                return IsSat(string + 1);
            string++;
        }
        return true;
    }
};

调错总结:

(1)没考虑到小数点后面出现‘E’ 或 ‘e’的情况,如 -125.3e6

(2)正负号后面紧跟小数点也是有效的,如 -.123,相当于-0.123。

有时间再改进代码~~

猜你喜欢

转载自blog.csdn.net/Eartha1995/article/details/81509065