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

関連項目




スポンサーリンク