boost::split

提供: C++入門
2013年3月3日 (日) 01:03時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「<!-- vim: filetype=mediawiki --> C++で文字列を分割する場合には、 boost::split を利用すると簡単にできます。 読み方 ぶーすと すぷ...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク


C++で文字列を分割する場合には、 boost::split を利用すると簡単にできます。

読み方

ぶーすと すぷりっと

概要

C言語の場合、文字列を分解するときに、strtok を使ったりします。 C++の場合は、string の find_first_of を使って、ループを回していくやりかたもあります。

どちらも実装しないといけないので、非常に面倒です。

もっと簡単にやる方法は、 boost::split を使うことです。

ヘッダファイル

#include <boost/algorithm/string.hpp>   // boost:spplit

ソースコード

スペースで区切られた文字列をスペースで分割し、 list に入れる例です。

#include <boost/algorithm/string.hpp>
#include <string>
#include <list>
#include <iostream>
 
#include <boost/foreach.hpp>
using namespace std;
int
main ()
{
        string str ("192.168.0.1 192.168.0.2");
 
        list<string> list_string;
 
        boost::split(list_string, str, boost::is_space());
 
        BOOST_FOREACH(string s, list_string) {
                cout << s << endl;
        }
        return 0;
}

文字列を分割する文字(デミリタ)がカンマの場合は、以下のようになります。

#include <boost/algorithm/string.hpp>
#include <string>
#include <list>
#include <iostream>
 
#include <boost/foreach.hpp>
using namespace std;
int
main ()
{
        string str ("192.168.0.1,192.168.0.2");
        string delim (",");
        list<string> list_string;
 
        boost::split(list_string, str, boost::is_any_of(delim));
 
        BOOST_FOREACH(string s, list_string) {
                cout << s << endl;
        }
        return 0;
}

複数のデリミタを指定できます。

#include <boost/algorithm/string.hpp>
#include <string>
#include <list>
#include <iostream>
 
#include <boost/foreach.hpp>
using namespace std;
int
main ()
{
        string str ("127.0.0.1-192.168.0.1*192.168.0.2 192.168.0.3");
        string delim (" *-");
 
        list<string> list_string;
 
        boost::split(list_string, str, boost::is_any_of(delim));
 
        BOOST_FOREACH(string s, list_string) {
                cout << s << endl;
        }
        return 0;
}

コンパイル

clang++ -I/usr/local/include boost_split.cpp

関連項目




スポンサーリンク