LEETCODE: Valid Number

来源:互联网 发布:网络应急演练报告 编辑:程序博客网 时间:2024/06/05 08:03

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

比较麻烦的一道题,要不断的实验和修正。因为我也不知道什么样的格式算是正确的数字。


class Solution {public:    bool isDigit(const char *ch) {        return *ch >= '0' && *ch <= '9';    }        bool allspace(const char *ch) {        while(*ch != '\0') {            if(*ch != ' ')                return false;            ch ++;        }        return true;    }    bool isNumber(const char *s) {        int ii = 0;        // Remove the spaces in the front.        while(*s == ' ') {            s ++;        }                // Skip '+' or '-'.        if(*s == '+' || *s == '-') {            s ++;        }                // If nothing input, return false;        if(*s == '\0')            return false;                // hasdleftnum represent has number. Or if has dot, represent has left number of the dot.        // hasdrightnum represent has number after the dot.        bool hasdleftnum = false;        bool hasdrightnum = false;        bool hasDot = false;        // Process number before e.        while(*s != '\0' && *s != 'e' && *s != 'E') {            if(isDigit(s)){                s ++;                if(hasDot)                    hasdrightnum = true;                else                    hasdleftnum = true;                continue;            }                        if(*s == '.') {                s ++;                if(hasDot)                    return false;                hasDot = true;                continue;            }                        if(*s == ' ') {                if(allspace(s) && (hasdleftnum || hasdrightnum))                    return true;            }                        return false;        }                // If has dot, but no numbers, return false.        if(hasDot && !hasdrightnum && !hasdleftnum)            return false;                // If is at end return true;        if(*s == '\0') return true;                //Process number after e.        bool hasrightnum = false;        if(*s == 'e' || *s == 'E') {            s ++;            if(*s == '+' || *s == '-') s ++;            while(*s != '\0') {                if(isDigit(s)) {                    s ++;                    hasrightnum = true;                    continue;                }                                if(*s == ' ') {                    if(allspace(s) && hasrightnum && (hasdleftnum || hasdrightnum))                        return true;                }                                return false;            }        }                // If has e, and both left and right of e has number, return true.        if((hasdleftnum || hasdrightnum) && hasrightnum)            return true;                    return false;    }};





0 0
原创粉丝点击