「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 splitboost 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
|
 
|

関連項目