剑指offer 表示数值的字符串
class Solution {
public:
    bool isNumeric(char* str) {
        // 标记符号、小数点、e是否出现过
        bool sign = false, decimal = false, hasE = false;
        for (int i = 0; i < strlen(str); i++) {
            if (str[i] == e || str[i] == E) {
                if (i == strlen(str)-1) return false; // e后面一定要接数字
                if (hasE) return false;  // 不能同时存在两个e
                hasE = true;
            } else if (str[i] == + || str[i] == -) {
                // 第二次出现+-符号,则必须紧接在e之后
                if (sign && str[i-1] != e && str[i-1] != E) return false;
                if (!sign && i > 0 && str[i-1] != e && str[i-1] != E) return false;
                sign = true;
            } else if (str[i] == .) {
                if (hasE || decimal) return false;
                decimal = true;
            } else if (str[i] < 0 || str[i] > 9) // 不合法字符
                return false;
        }
        return true;
    }
};
2020-05-03
在牛客打卡24天,今天学习:刷题 1 道/代码提交 1 次
全部评论

相关推荐

04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务