C++ で文字列が数値かどうかを判定するにはどうすればいいですか? 質問する

C++ で文字列が数値かどうかを判定するにはどうすればいいですか? 質問する

文字列が数値であるかどうかをチェックする関数を書こうとして、かなり苦労しました。私が書いているゲームでは、読み込んでいるファイルの行が数値であるかどうかをチェックするだけです (この方法で、それがパラメータであるかどうかがわかります)。私は以下の関数を書きましたが、これはスムーズに動作していると思います (または、誤って編集して停止したか、私が統合失調症か、Windows が統合失調症です)。

bool isParam (string line)
{
    if (isdigit(atoi(line.c_str())))
        return true;

    return false;
}

ベストアンサー1

最も効率的な方法は、数字以外の文字が見つかるまで文字列を反復処理することです。数字以外の文字がある場合は、文字列は数値ではないと見なすことができます。

bool is_number(const std::string& s)
{
    std::string::const_iterator it = s.begin();
    while (it != s.end() && std::isdigit(*it)) ++it;
    return !s.empty() && it == s.end();
}

または、C++11 の方法で実行したい場合:

bool is_number(const std::string& s)
{
    return !s.empty() && std::find_if(s.begin(), 
        s.end(), [](unsigned char c) { return !std::isdigit(c); }) == s.end();
}

以下のコメントで指摘されているように、これは正の整数に対してのみ機能します。負の整数や小数を検出する必要がある場合は、より堅牢なライブラリベースのソリューションを使用する必要があります。ただし、負の整数のサポートを追加するのは非常に簡単です。

おすすめ記事