「boost::tokenizer」の版間の差分

提供: C++入門
移動: 案内検索
行2: 行2:
 
vim: filetype=mediawiki
 
vim: filetype=mediawiki
 
-->
 
-->
 +
 +
[[Boost tokenizer]] は、文字列の切り出しを行うためのライブラリです。
  
 
読み方
 
読み方
行10: 行12:
  
 
== 概要 ==
 
== 概要 ==
 +
 +
[[Boost tokenizer]] は、カンマで区切られた文字列から文字列を切り出すといった用途で利用されます。[[C言語]]でいう strtok() のようなものです。
 +
 +
[[Boost tokenizer]] のほかに、 [[Boost split]] もあります。
  
 
== ヘッダファイル ==
 
== ヘッダファイル ==

2013年3月10日 (日) 01:00時点における版


Boost tokenizer は、文字列の切り出しを行うためのライブラリです。

読み方

boost tokenizer
ぶーすと とーくないざー

概要

Boost tokenizer は、カンマで区切られた文字列から文字列を切り出すといった用途で利用されます。C言語でいう strtok() のようなものです。

Boost tokenizer のほかに、 Boost split もあります。

ヘッダファイル

#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
|
 
|

関連項目