C++ でコンマ区切りの文字列シーケンスを解析する
胡金庫
2023年10月12日
-
C++ で
std::string::find
およびstd::string::erase
関数を使用してカンマ区切りの文字列シーケンスを解析する -
std::getline
関数を使用して、カンマ区切りの文字列シーケンスを解析する
この記事では、C++ でコンマ区切りの文字列シーケンスを解析する方法に関する複数の方法を示します。
C++ で std::string::find
および std::string::erase
関数を使用してカンマ区切りの文字列シーケンスを解析する
std::find
メソッドは、std::string
クラスの組み込み関数であり、指定されたサブストリングの位置を見つけるために使用できます。この場合、検出される部分文字列を示す単一の引数を取ります。複数文字の文字列変数は、引数として渡すように初期化できます。ただし、次の例では、string
を含む単一のコンマを宣言します。find
メソッドは部分文字列の位置を返し、部分文字列が見つからない場合は string::npos
を返すため、比較式を while
ループに入れて、式が true と評価されるまで実行できます。
また、各反復で解析された文字列を vector
コンテナに格納します。次に、erase
メソッドが呼び出され、最初に見つかったコンマ区切り文字の前の文字が削除され、次の反復で同じ string
オブジェクトの処理が続行されます。最後に、vector
に格納されている要素を cout
ストリームに出力します。
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "1,2,3,4,5,6,7,8,9,10";
string delimiter = ",";
vector<string> words{};
size_t pos = 0;
while ((pos = text.find(delimiter)) != string::npos) {
words.push_back(text.substr(0, pos));
text.erase(0, pos + delimiter.length());
}
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
出力:
1
2
3
4
5
6
7
8
9
std::getline
関数を使用して、カンマ区切りの文字列シーケンスを解析する
前の解決策は、コンマ区切りのシーケンスの最後の番号の抽出を見逃しています。したがって、前のコード例で条件付きチェックを追加するよりも、std::getline
関数を使用して次のメソッドを使用する方がよい場合があります。getline
は、指定された入力ストリームから文字を読み取り、それらを string
オブジェクトに格納します。この関数は、オプションの 3 番目の引数を取り、入力文字列を分割するための区切り文字を指定します。また、抽出した文字列は、後で使用できるように、反復ごとに std::vector
コンテナに保存します。
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "1,2,3,4,5,6,7,8,9,10";
char delimiter = ',';
vector<string> words{};
stringstream sstream(text);
string word;
while (std::getline(sstream, word, delimiter)) {
words.push_back(word);
}
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
出力:
1
2
3
4
5
6
7
8
9
10
著者: 胡金庫