2012-06-10 2 views
0

У меня есть проблемы с повышающим Tokenizer, вот мой код:Случайного поведение повышения токенизатор

#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 

Что я делаю неправильно?

Спасибо.

ответ

3
TokenizerSeparator separator(&delim); 

Вы tokenizing на основе адрес характер был сохранен на, а не значения символа.

+0

Конструктор 'char_separator ' хочет аргумент 'const char *'. Он не компилируется, если я пишу 'Разделитель TokenizerSeparator (delim);' – Alexandre

+1

@Alexandre. Скорее всего, он хочет строку с нулевым завершением '', ​​а не один символ. – chris

+2

Как показано в [пример] (http://www.boost.org/doc/libs/1_39_0/libs/tokenizer/char_separator.htm), 'boost :: char_separator sep (" -; | ");' –

0

Спасибо @DavidSchwartz за ответ (см. Комментарии выше).

char_separator нуждается в действительной строке C в своем конструкторе.

Смежные вопросы