結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

Boostを使ってstringをsplitする


Boost String Algorithms Libraryというものを使います。

以下、文字列をsplitする例です。「,」をデリミタとして使います。

#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
using namespace std;

int main()
{
  string strTarget = "left,right,,one,two";
  vector<string> vResult;

  boost::algorithm::split( vResult, 
                           strTarget, 
                           boost::is_any_of(",") );

  cout << "vResult[0]=" << vResult[0] << endl;
  cout << "vResult[1]=" << vResult[1] << endl;
  cout << "vResult[2]=" << vResult[2] << endl;
  cout << "vResult[3]=" << vResult[3] << endl;
  cout << "vResult[4]=" << vResult[4] << endl;

  return 0;
}

上記の実行結果

vResult[0]=left
vResult[1]=right
vResult[2]=
vResult[3]=one
vResult[4]=two

is_any_ofは、いずれか一つにマッチしたらsplitするという意味です。
今回はデリミタを「,」のみにしているので「,」のみで区切られますが、
デリミタを複数指定することも可能です。
以下、複数の例です。「,」と「¥」をデリミタに指定します。(ヘッダは省略します)

int main()
{
  string strTarget = "left,right\\,one\\two";
  vector<string> vResult;

  boost::algorithm::split( vResult, 
                           strTarget, 
                           boost::is_any_of(",\\") );

  cout << "vResult[0]=" << vResult[0] << endl;
  cout << "vResult[1]=" << vResult[1] << endl;
  cout << "vResult[2]=" << vResult[2] << endl;
  cout << "vResult[3]=" << vResult[3] << endl;
  cout << "vResult[4]=" << vResult[4] << endl;

  return 0;
}

上記の実行結果

vResult[0]=left
vResult[1]=right
vResult[2]=
vResult[3]=one
vResult[4]=two