2016-09-27 11 views
0

構造体から複数の文字列を読み込み、ブーストトークナイザを使用してトークン化する必要があります。基本的には私が現在持っているのはこれです:ブーストトークナイザの再割り当て

typedef boost::tokenizer<boost::char_separator<char> > Tokenizer; 
boost::char_separator<char> sep(";"); 

Tokenizer tok1(str1, sep); 
... 

Tokenizer tok2(str2, sep); 
... 

Tokenizer tok3(str3, sep); 
..... 

私は毎回新しいトークナイザオブジェクトを作成しています。ただ1つのトークナイザオブジェクトを使ってこれを行うことは可能ですか?このようなもの:

Tokenizer tok(str1, sep); 
... 

// tok(str2, sep); or tok = Tokenizer(str2, sep) 

PS:私は上記の両方を試みて失敗しました。

答えて

1

メンバー関数assignを使用して、新しいトークンソースを割り当てます。

#include<iostream> 
#include<boost/tokenizer.hpp> 
#include<string> 

void test(boost::tokenizer<>& tok) 
{ 
    for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){ 
     std::cout << *beg << " : "; 
    } 
    std::cout << '\n'; 
} 

int main() 
{ 
    std::string s = "This is, a test"; 
    boost::tokenizer<> tok(s); 

    test(tok); 

    tok.assign(s); 
    test(tok); 

    tok.assign(s); 
    test(tok); 
} 

予想される出力:

This : is : a : test : 
This : is : a : test : 
This : is : a : test : 
関連する問題