「boost::split」の版間の差分
提供: C++入門
(ページの作成:「<!-- vim: filetype=mediawiki --> C++で文字列を分割する場合には、 boost::split を利用すると簡単にできます。 読み方 ぶーすと すぷ...」) |
(相違点なし)
|
2013年3月3日 (日) 01:03時点における版
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