--53オファーは安全シリーズを証明しています。数値文字列を表します

Q:任意の(整数および分数を含む)数値文字列かどうかを決定するために使用される機能を実現します。例えば、文字列"100"、 "5E2"、 " - 123"、 "3.1416" と"-1E-16"を示す値。しかし、 "12E"、 "1a3.14"、 "1.2.3"、 "+ - 5" と"12E + 4.3"もありません。
T:
議論の1点(数は小数点以下がない場合は、実際に、私はこれは少し問題の書き込みだと思う、それまたは値なしならば、正しいか間違っ??カウント

    bool isNumeric(char *string) {
        if (string == nullptr || *string == '\0')
            return false;
        for (int i = 0; i < strlen(string); i++) {
            if ((string[i] < '0' || string[i] > '9') && string[i] != 'e' && string[i] != 'E' && string[i] != '+' &&
                string[i] != '-' && string[i] != '.')
                return false;
        }
        bool symbol = false, hasE = false, hasDot = false;
        for (int i = 0; i < strlen(string); i++) {
            if (string[i] == '+' || string[i] == '-') {
                if (i == 0 || string[i - 1] == 'e' || string[i - 1] == 'E')
                    continue;
                else
                    return false;
            }
            if (string[i] == 'e' || string[i] == 'E') {
                if (hasE || i == strlen(string) - 1)
                    return false;
                else
                    hasE = true;
            }
            if (string[i] == '.') {
                if (hasE || hasDot)
                    return false;
                else
                    hasDot = true;
            }
        }
        return true;
    }

2. JavaやPythonなどの言語の場合は、直接正規表現を使用することができます。しかし...... C ++ではありません。
次の定期的な説明:
[+ \\ \\ - ] - >存在または正負の不在?
\\ D * - >と一致しているような-.34または3.34整数部が現れ、
(\\ \\。 ?D +) - >小数点が表示されますが、その後、小数点以下の数値が持っている必要がある場合は、
それ以外の場合は一緒に表示されません
([EE] [\\ + \\ - ] \\ D +) - > インデックスセクションが存在する場合は、その後、eまたはE肯定を??表示され、+または-起こっても起こらなくても、
その後の整数を続ける必要があり、発生していない又は部分全体

    public boolean isNumeric(char[] str) {
        String string = String.valueOf(str);
        return string.matches("[\\+\\-]?\\d*(\\.\\d+)?([eE][\\+\\-]?\\d+)?");
    }

おすすめ

転載: www.cnblogs.com/xym4869/p/12361077.html