「boost::tokenizer」の版間の差分
提供: C++入門
細 (Daemon がページ「Boost tokenizer」を「Boost::tokenizer」に、リダイレクトを残さずに移動しました) |
細 (Daemon がページ「Boost::tokenizer」を「boost::tokenizer」に移動しました) |
(相違点なし)
|
2013年3月23日 (土) 16:31時点における最新版
Boost::tokenizer は、文字列の切り出しを行うためのライブラリです。
読み方
- boost::tokenizer
- ぶーすと とーくないざー
目次
概要
boost::tokenizer は、カンマで区切られた文字列から文字列を切り出すといった用途で利用されます。C言語でいう strtok() のようなものです。
boost::tokenizer のほかに、 Boost::split もあります。
C++ で CSVファイルを扱うには、boost::tokenizerでCSVを読み込む を参考にしてください。
ヘッダファイル
#include <boost/tokenizer.hpp> template < class TokenizerFunc = char_delimiters_separator<char>, class Iterator = std::string::const_iterator, class Type = std::string > class tokenizer
boost::tokenizer を利用したシンプルな例
文字列の前後の空白を削除し、セパレータが並んだ場合にも、空白エントリとして残さない例です。 boost::split と boost::trim を組み合わせるよりも、簡単かもしれません。
ソースコード boost_tokenizer_simple1.cpp
#include <iostream> #include <string> #include <boost/tokenizer.hpp> int main(int argc, char const* argv[]) { std::string str1(" 1 \t2 3 "); boost::tokenizer<> tokens(str1); for (boost::tokenizer<>::iterator it = tokens.begin(); it != tokens.end(); ++it) { std::cout << *it << std::endl; } return 0; }
コンパイル
clang++ -I/usr/local/include boost_tokenizer_simple1.cpp -o boost_tokenizer_simple1
実行例
% ./boost_tokenizer_simple1 1 2 3
複数のセパレータを利用したシンプルな例
空のエントリは、残りません。
ソースコード boost_char_separator_1.cpp
#include <iostream> #include <string> #include <boost/tokenizer.hpp> #include <boost/foreach.hpp> int main(int argc, char const* argv[]) { std::string str1(";;1,,,2,3;4|5|||"); typedef boost::char_separator<char> BOOST_CHAR_SEP; typedef boost::tokenizer< BOOST_CHAR_SEP > BOOST_TOKENIZER; BOOST_CHAR_SEP sep(";,|"); BOOST_TOKENIZER tokens(str1, sep); BOOST_FOREACH(std::string s, tokens) { std::cout << s << std::endl; } return 0; }
コンパイル
clang++ -I/usr/local/include boost_char_separator_1.cpp -o boost_char_separator_1
実行例
% ./boost_char_separator_1 1 2 3 4 5
char_separator を利用した空のエントリを残す例
ソースコード boost_tokenizer.cpp
boost::keep_empty_tokens によって、空のエントリが残ります。
#include <iostream> #include <string> #include <boost/tokenizer.hpp> #include <boost/foreach.hpp> int main(int argc, char const* argv[]) { std::string str1("1,2,3,4,,5"); boost::char_separator<char> separator(",", "", boost::keep_empty_tokens); boost::tokenizer< boost::char_separator<char> > tokens(str1, separator); BOOST_FOREACH(std::string s, tokens) { std::cout << s << std::endl; } return 0; }
コンパイル
clang++ -I/usr/local/include boost_tokenizer.cpp -o boost_tokenizer
実行例
% ./boost_tokenizer 1 2 3 4 5
デリミタを残す例
ソースコード boost_char_separator_2.cpp
#include <iostream> #include <string> #include <boost/tokenizer.hpp> #include <boost/foreach.hpp> int main(int argc, char const* argv[]) { std::string str1(";;1,,,2,3;4||5||"); typedef boost::char_separator<char> BOOST_CHAR_SEP; typedef boost::tokenizer< BOOST_CHAR_SEP > BOOST_TOKENIZER; BOOST_CHAR_SEP sep(";,", "|", boost::keep_empty_tokens); BOOST_TOKENIZER tokens(str1, sep); BOOST_FOREACH(std::string s, tokens) { std::cout << s << std::endl; } return 0; }
実行例
% ./boost_char_separator_2 1 2 3 4 | | 5 | |