1

C++ で暗号化/復号化プログラムを作成しており、ユーザーが提供する 3 つの番号を使用して暗号化をカスタマイズしています。cplusplus.com で isdigit() について読み、それに基づいて関数を作成しました。

bool is_numeric(char *string)
{
    int sizeOfString = sizeof(string);
    int iteration = 0;
    bool isNumeric = true;

    while(iteration < sizeOfString)
    {
        if(!isdigit(string[iteration]))
        {
            isNumeric = false;
            break;
        }

        iteration++;

    }

    return isNumeric;
}

しかし、うまくいかないようです。数値を指定しても数値以外の文字を指定しても、false が返されます。私のアプローチの何が問題なのですか。

4

4 に答える 4

1

別の可能な解決策は、stringstream を使用することです。

bool isNumeric(const string& s) {
    stringstream ss(s);
    int val;
    ss >> val;
    return ! ss.fail() && ss.eof();
}

stringstream::operator>>(int&) は、指定された文字列が数値でない場合に文字列ストリームの failbit が設定されるようにし、文字列内のすべてが正確に 1 つの整数 (および他には何もない) であるかどうかを確認する必要があるため、テストも行います。 eof ビットの場合。これは負の数でも機能し、浮動小数点数を受け入れたい場合は int を double に変更することもできます。

于 2013-08-09T20:09:59.173 に答える