文字列が数字で構成されているかを判定する - C++ プログラミング

PROGRAM


文字列が数字で構成されているかを判定する

構成要素を判定する関数

C++ では、イテレータ で指定された範囲の内容がどのようになっているかを判定する関数が <algorithm> ヘッダーにいくつか用意されています。

std::all_of 範囲内の要素の「すべて」が指定された条件を「満たす」かを調べます。
全てが条件を満たす場合に true になります。
std::any_of 範囲内の要素の「どれか」が指定された条件を「満たす」かを調べます。
ひとつでも条件を満たすものが範囲に含まれていた場合に true になります。
std::none_of 範囲内の要素の「すべて」が指定された条件を「満たさない」かを調べます。
ひとつも条件を満たさない場合に true になります。

引数はどれも、次の通りです。

第1引数 範囲の開始位置を示すイテレータです。読取専用イテレータで大丈夫です。
第2引数 範囲の末端を示すイテレータです。読取専用イテレータで大丈夫です。
第3引数 条件判定に使う関数です。指定したイテレータの値を 1 つ引数に取って bool として戻り値を評価できるものなら、関数でも構造体でも大丈夫です。

 

文字列が全て数字であるかを調べる

これを使うと、例えば「std::string の全ての文字が数字で構成されているか」を調べることもできます。

全ての文字が数字であるかを調べたいので、今回は std::all_of 関数を使います。また、文字が数字であるかを調べるために <cctype> ヘッダーに定義されている isdigit 関数を使います。

 

つまり、今回は次の 2 つのヘッダーが必要になります。

#include <cctype>

#include <algorithm>

そして std::string 型の string について、その文字列が全て数字で構成されているかを調べるには次のようにします。

if (std::all_of(string.cbegin(), string.cend(), isdigit))

{

// string の構成文字列が全て数字の場合に true になります。

 

}

ここの "std::all_of" のところを "std::any_of" に変えるだけで「ひとつでも数字を含む場合」になったり、"std::none_of" にすることで「数字が含まれない場合」になったりします。

他にも "isdigit" を "isalpha" に変えれば「アルファベットかどうか」を判定できるようにもなるし、独自の関数を作ってその 関数ポインタ を指定すれば別の自由な判定も可能です。


[ もどる ]