表示数值的字符串

题目:

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

思考:

首先,题中的范例并没有把所有符合条件的数值的表达式表示出来,光光按照题目中所给出例子来总结规律是不够的。刚开始的时候,我仅仅是从题目中给的范例,加上自己平时的一点经验中总结出判断的规律,所以并没有找到正确的判断的规律。在失败了几次之后,我总结出了一些正确的经验。利用标记法逐步检索每一个字符。

总结的规律:

1、第一个字符可以是 ‘+’ 或 ‘-’。

2、在判断完符号位后,下一位判断的字符不能是 ‘\0’

3、小数点最多只能出现一次,并且不能在E 或 e 后出现小数点

4、E 或 e 最多只能出现一次,并且出现E 和 e 之前,必须出现过数字。

5、E 或 e 之后可以是 ‘+’ 或是 ‘-’ ,判断完是否为 ‘+’ 或 ‘-’ 之后,下一位判断的字符,不能是‘\0’

class Solution {
    public:
        bool isNumeric(char *string) {
            if(string == NULL) {
                return false;
            }
            if(*string == '+' || *string == '-') {
                string++;
            }
            if(*string == '\0') {
                return false;
            }
            int dot = 0;//小数点是否出现过
            int num = 0;//数字是否出现过
            int index = 0;//e指数是否出现过
            while(*string != '\0') {
                if(*string >= '0' && *string <= '9') {
                    num = 1;
                    string++;
                }
                else if(*string == '.') {
                    if(dot != 0 || index != 0) {
                        return false;
                    }
                    dot = 1;
                    string++;
                }
                else if(*string == 'E' || *string == 'e') {
                    if(index != 0 || num == 0) {
                        return false;
                    }
                    index = 1;
                    string++;
                    if(*string == '+' || *string == '-') {
                        string++;
                    }
                    if(*string == '\0') {
                        return false;
                    }
                }
                else {
                    return false;
                }
            }
            return true;
        }
};

 

你可能感兴趣的:(笔试训练)