最近の言語では、文字列の分離用関数としてsplitという関数が用意されている事が多いです。
C++にはありませんが、stringstreamを使って作る事が出来ます。
それでは、プログラムを作ってから説明します。
データは「,」で区切られた文字列という設定です。
分離した文字列はベクタに格納します。
<sample program cpp041-01>
#include <iostream> #include <string> #include <sstream> #include <vector> int main() { std::string strSource = "ABC,DEF,GHI"; std::vector<std::string> vecStr; std::stringstream ssWork; std::string strWork; ssWork << strSource; while (std::getline(ssWork, strWork, ',')) { if (!strWork.empty()) { vecStr.push_back(strWork); } } for (unsigned int i = 0; i < vecStr.size(); i++) { std::cout << vecStr[i] << std::endl; } return 0; } |
<実行結果>
ABC DEF GHI 続行するには何かキーを押してください・・・
まずは用意した元データ(strSource)を文字列ストリームに移します。
ssWork << strSource; |
stringstreamをはストリームの1つなので、前にやったgetline関数が適用出来ます。
getline関数は1行読み込みを行う関数ですが、オーバーロードされた関数があり「区切り文字」を自分で設定する事が出来ます。
std::getline(ssWork, strWork, ',') |
「,」を区切り文字に設定していますので、「,」までの文字列を読み込み「strWork」に格納します。
「strWork」が空で無ければベクタにpush_backします。
これをストリームの終わりまで繰り返す事で分離した文字列を取り出す事が出来ます。
「,」区切りのcvsファイルなどにも使えそうですね。