У меня есть проблемы с повышающим 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
Что я делаю неправильно?
Спасибо.
Конструктор 'char_separator' хочет аргумент 'const char *'. Он не компилируется, если я пишу 'Разделитель TokenizerSeparator (delim);' –
Alexandre
@Alexandre. Скорее всего, он хочет строку с нулевым завершением '', а не один символ. – chris
Как показано в [пример] (http://www.boost.org/doc/libs/1_39_0/libs/tokenizer/char_separator.htm), 'boost :: char_separator sep (" -; | ");' –