11

私はboost::tokenizerを探していましたが、ドキュメントが非常に薄いことがわかりました。「イルカ - サル - ヒヒ」などの文字列をトークン化し、すべての単語とダブル ダッシュをすべてトークンにすることは可能ですか? 例から、許可されている単一文字の区切り記号のみを見てきました。ライブラリは、より複雑な区切り文字に対して十分に高度ではありませんか?

4

4 に答える 4

10

iter_split を使用すると、複数の文字トークンを使用できます。以下のコードは、以下を生成します:

dolphin
mon-key
ヒヒ

#include <iostream>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/iter_find.hpp>

    // code starts here
    std::string s = "dolphin--mon-key--baboon";
    std::list<std::string> stringList;
    boost::iter_split(stringList, s, boost::first_finder("--"));

    BOOST_FOREACH(std::string token, stringList)
    {    
        std::cout << token << '\n';  ;
    }
于 2009-10-07T03:16:49.843 に答える
1

1 つのオプションは、boost::regex を試すことです。カスタム トークナイザーと比較した場合のパフォーマンスは不明です。

std::string s = "dolphin--monkey--baboon";

boost::regex re("[a-z|A-Z]+|--");
boost::sregex_token_iterator iter(s.begin(), s.end() , re, 0);
boost::sregex_token_iterator end_iter;

while(iter != end_iter)
{
    std::cout << *iter << '\n';
    ++iter;
}
于 2009-08-09T21:56:56.590 に答える
0

やりたいことをするためにあなた自身のTokenizerFunctionを書く必要があるようです。

于 2009-08-09T20:56:44.137 に答える