「boost::tokenizer」の版間の差分
提供: C++入門
(ページの作成:「<!-- vim: filetype=mediawiki --> 読み方 ;boost tokenizer: ぶーすと とーくないざー __TOC__ == 概要 == == ヘッダファイル == <syntaxhigh...」) |
|||
行11: | 行11: | ||
== 概要 == | == 概要 == | ||
+ | == ヘッダファイル == | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | #include <boost/tokenizer.hpp> | ||
− | == | + | template < |
+ | class TokenizerFunc = char_delimiters_separator<char>, | ||
+ | class Iterator = std::string::const_iterator, | ||
+ | class Type = std::string | ||
+ | > | ||
+ | class tokenizer | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == boost::tokenizer を利用したシンプルな例 == | ||
+ | |||
+ | 文字列の前後の空白を削除し、セパレータが並んだ場合にも、空白エントリとして残さない例です。 | ||
+ | [[boost split]] と [[boost trim]] を組み合わせるよりも、簡単かもしれません。 | ||
+ | |||
+ | === ソースコード boost_tokenizer_simple1.cpp === | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
+ | #include <iostream> | ||
+ | #include <string> | ||
#include <boost/tokenizer.hpp> | #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; | ||
+ | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == ソースコード == | + | === コンパイル === |
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | clang++ -I/usr/local/include boost_tokenizer_simple1.cpp -o boost_tokenizer_simple1 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === 実行例 === | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | % ./boost_tokenizer_simple1 | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == 複数のセパレータを利用したシンプルな例 == | ||
+ | |||
+ | 空のエントリは、残りません。 | ||
+ | |||
+ | === ソースコード boost_char_separator_1.cpp === | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
行31: | 行82: | ||
{ | { | ||
− | std::string str1("1,2,3,4,5"); | + | 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; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === コンパイル === | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | clang++ -I/usr/local/include boost_char_separator_1.cpp -o boost_char_separator_1 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === 実行例 === | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | % ./boost_char_separator_1 | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 | ||
+ | 4 | ||
+ | 5 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == char_separator を利用した空のエントリを残す例 == | ||
+ | |||
+ | === ソースコード boost_tokenizer.cpp === | ||
+ | |||
+ | boost::keep_empty_tokens によって、空のエントリが残ります。 | ||
+ | |||
+ | <syntaxhighlight lang="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"); | ||
boost::char_separator<char> separator(",", "", boost::keep_empty_tokens); | boost::char_separator<char> separator(",", "", boost::keep_empty_tokens); | ||
行46: | 行146: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == コンパイル == | + | === コンパイル === |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行52: | 行152: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == 実行例 == | + | === 実行例 === |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行60: | 行160: | ||
3 | 3 | ||
4 | 4 | ||
+ | |||
5 | 5 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == デリミタを残す例 == | ||
+ | |||
+ | === ソースコード boost_char_separator_2.cpp === | ||
+ | |||
+ | <syntaxhighlight lang="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; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === 実行例 === | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | % ./boost_char_separator_2 | ||
+ | |||
+ | |||
+ | 1 | ||
+ | |||
+ | |||
+ | 2 | ||
+ | 3 | ||
+ | 4 | ||
+ | | | ||
+ | |||
+ | | | ||
+ | 5 | ||
+ | | | ||
+ | |||
+ | | | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
2013年3月10日 (日) 00:55時点における版
読み方
- boost tokenizer
- ぶーすと とーくないざー
目次
概要
ヘッダファイル
#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 | |