美文网首页
表示数值的字符串

表示数值的字符串

作者: 李伟13 | 来源:发表于2020-05-08 00:30 被阅读0次

题目描述

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

第一想法

  • 按位数查找满足数值的条件
  • 第一位可以为'+ -'和'数',若为正负号,第二位必须为数
  • 数要满足的条件
  • 小数点前00.1不可以
  • (e-)为一个整体
  • '.'后必须跟数

AC代码

class Solution {
public:
    bool isNumeric(char* string)
    {
        if (*string == '+' || *string == '-') {
            ++string;
        }
        return isNumstrstr(string) || isDecimal(string) || isE(string);
    }
    
    inline bool isNum(char* string){
        return (*string - '0' >= 0 && *string - '0' < 10);
    }
    
    inline bool ispNum(char* string){
        return (*string - '0' > 0 && *string - '0' < 10);
    }
    
    bool isNumstr(char *string){
        if (*string == '0') {
            return false;
        }
        return isNumstrstr(string);
    }
    
    bool isNumstrstr(char *string){
        while (*string != '\0') {
            if (!isNum(string)) {
                return false;
            }
            ++string;
        }
        return true;
    }
    
    bool isDecimal(char *string){
        if (*string == '0') {
            if (*(++string) != '.') {
                return false;
            }
        }
        else {
            while (*string != '.') {
                if (isNum(string)) {
                    ++string;
                }
                else {
                    return false;
                }
            }
            ++string;
        }
        while (*string != '\0') {
            if (isNum(string)) {
                ++string;
            }
            else {
                return false;
            }
        }
        return true;
    }
    
    bool isE(char *string){
        if (*string == '0') {
            if (*(++string) != '.') {
                return false;
            }
        }
        else {
            while (*string != '.') {
                if (*string == 'E' || *string == 'e') {
                    --string;
                    break;
                }
                if (isNum(string)) {
                    ++string;
                }
                else {
                    return false;
                }
            }
            ++string;
        }
        while (*string != '\0' && *string != 'E' && *string != 'e') {
            if (isNum(string)) {
                ++string;
            }
            else {
                return false;
            }
        }
        ++string;
        if (*string == '\0') {
            return false;
        }
        if (*string == '+' || *string == '-') {
            ++string;
            while (*string != '\0') {
                if (isNum(string)) {
                    ++string;
                }
                else {
                    return false;
                }
            }
            return true;
        }
        else {
            while (*string != '\0') {
                if (isNum(string)) {
                    ++string;
                }
                else {
                    return false;
                }
            }
            return true;
        }
    }
};

又臭又长,写到绝望.

看了讨论区

class Solution {
public:
    bool isNumeric(char* string)
    {
        bool sign = false, decimal = false, hasE = false;
        for (int i = 0; i < strlen(string); ++i) {
            if (string[i] == 'e' || string[i] == 'E') {
                if (i == strlen(string) - 1) return false;
                if (hasE) return false;
                hasE = true;
            } else if (string[i] == '+' || string[i] == '-') {
                if (sign && string[i - 1] != 'e' && string[i - 1] != 'E') return false;
                if (!sign && i > 0 && string[i - 1] != 'e' && string[i - 1] != 'E') return false;
                sign = true;
            } else if (string[i] == '.') {
                if (hasE || decimal) return false;
                decimal = true;
            } else if (string[i] < '0' || string[i] > '9') // 不合法字符
                return false;
        }
        return true;
    }
};

相关文章

  • JZ-053-表示数值的字符串

    表示数值的字符串 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",...

  • LeetCode 每日一题 [52] 表示数值的字符串

    LeetCode 表示数值的字符串 [中等] 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字...

  • 算法实现

    题1:表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e...

  • Java小技巧

    1. 数值转字符串 使用空字符串连接数值会变成字符串 2. 数值太长友好表示 使用_分割数值,值不变 3.随机字符...

  • 《剑指 Offer (第 2 版)》第 20 题:表示数值的字符

    第 20 题:表示数值的字符串 传送门: 表示数值的字符串,牛客网 online judge 地址。 请实现一个函...

  • 实现一个函数判断字符串是否表示数值(包括整数和小数)

    实现一个函数判断字符串是否表示数值(包括整数和小数),例如,字符串'+100','5e2','-123'都表示数值...

  • 面试题20:表示数值的字符串

    题目:请实现一个函数用于判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100“、”5e2“都表示数值,...

  • 表示数值的字符串

    题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-12...

  • 表示数值的字符串

    题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-12...

  • 表示数值的字符串

    题目描述   请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","...

网友评论

      本文标题:表示数值的字符串

      本文链接:https://www.haomeiwen.com/subject/molvwhtx.html