1. ホーム
  2. c++

[解決済み] C++で文字列が数字かどうか判断する方法とは?

2022-03-08 20:12:49

質問

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

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

    return false;
}

解決方法は?

最も効率的な方法は、数字でない文字が見つかるまで文字列を繰り返し処理することです。 数字でない文字があれば、その文字列は数字ではないと考えることができる。

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();
}

下のコメントで指摘されているように、これは正の整数のみで動作します。 負の整数や分数を検出する必要がある場合は、もっと堅牢なライブラリベースのソリューションにしたほうがいい。 しかし、負の整数のサポートを追加するのはとても簡単なことである。