この投稿では、C++でコンマ区切りの文字列を解析する方法について説明します。

1.文字列ストリームの使用

カンマ区切りの文字列を分割する標準的な解決策は、 std::stringstream。以下は、一度に1文字を読み取り、直接の文字(つまり、コンマ)を破棄することによってその使用法を示しています。

ダウンロード  コードを実行する

出力:

1 2 3 4 5

 
コードは、ifステートメントの代わりにwhileループを使用して、文字列内の複数の連続する区切り文字または空白を処理するように簡単に拡張できます。

ダウンロード  コードを実行する

出力:

1 2 3 4 5

 
上記の両方のソリューションは、結果を整数vectorに入れて返します。コードを簡単に変更して、文字列のvectorを作成できます。

ダウンロード  コードを実行する

出力:

1 2 3 4 5

2.使用する std::string::find 関数

別の解決策は、 std::string::find 文字列内の区切り文字の次の位置を取得し、最後の区切り文字位置と現在の区切り文字位置の間にある部分文字列をvectorに挿入する関数。

次のコードは、整数のvectorを作成することでこれを示していますが、文字列のvectorを作成し、不正な入力(連続した区切り文字、空白など)を処理するように簡単に変更できます。

ダウンロード  コードを実行する

出力:

1 2 3 4 5

3.正規表現を使用する

カンマ区切りの文字列を解析するためのもう1つのもっともらしい解決策は、正規表現を使用することです。正規表現は、シーケンスに対してパターンマッチングを実行するための標準化された方法です。

ダウンロード  コードを実行する

出力:

1 2 3 4 5

4.Boostライブラリの使用

Boost C++ライブラリは、このタスクのためのいくつかのユーティリティクラスも提供します。 The Boost tokenizer classは、特定の文字を区切り文字として解釈することにより、シーケンスに含まれるトークンのビューを提供します。

コードをダウンロード

出力:

1 2 3 4 5

 
Boostライブラリは boost::algorithm::split 式をトークン化する関数。これは、 strtok Cで機能します boost::algorithm::split 関数は、入力シーケンスをトークンに分割し、述語を使用して指定された区切り文字で区切ります。

コードをダウンロード

出力:

1 2 3 4 5

これで、C++でコンマ区切りの文字列を解析できます。