0

ブーストトークナイザーに問題があります。これが私のコードです:

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

using namespace std;

static vector<std::string> tokenize(const std::string& input, const char delim) {
    std::cout << "Tokenize: " << input << std::endl;
    vector<std::string> vector;
    typedef boost::char_separator<char> TokenizerSeparator;
    typedef boost::tokenizer<TokenizerSeparator> Tokenizer;
    TokenizerSeparator separator(&delim);
    Tokenizer tokenizer(input, separator);
    Tokenizer::iterator iterator;

    for(iterator=tokenizer.begin(); iterator!=tokenizer.end();++iterator){
        std::cout << "elem found: " + *iterator << std::endl;
        vector.push_back(*iterator);
    }
    return vector;
}

int main(int argc, const char * argv[])
{
    string input = "somedata,somedata,somedata-somedata;more data;more data";
    vector<string> list = tokenize(input, ';');

    return 0;
}

このコードは常に一貫して動作するわけではありません。機能する場合もあれば、複数回実行すると機能しない場合もあります。ここで機能しない場合、次の出力が得られます。

Tokenize: somedata,somedata,somedata-somedata;more data;more data
elem found: some
elem found: ata,some
elem found: ata,some
elem found: ata-some
elem found: ata
elem found: more 
elem found: ata
elem found: more 
elem found: ata

私は何を間違っていますか?

ありがとう。

4

2 に答える 2

3
TokenizerSeparator separator(&delim);

文字の値ではなく、文字が格納されたアドレスに基づいてトークン化しています。

于 2012-06-10T23:33:27.783 に答える
0

答えてくれた@DavidSchwartzに感謝します(上記のコメントを参照)。

char_separator は、そのコンストラクターに有効な C 文字列を必要とします。

于 2012-06-10T23:50:00.687 に答える