boost::tokenizer
提供: C++入門
スポンサーリンク
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 | |
関連項目
ツイート
スポンサーリンク