Использование классификатора с split_iterator - PullRequest
4 голосов
/ 31 марта 2011

Есть что-то в алгоритмах форсированной строки, которые мне не хватает. Я пытаюсь использовать split_iterator с использованием Clasifier в качестве точки разделения. Так, например, я хотел бы иметь возможность сделать что-то вроде этого:

make_split_iterator(str, is_space);

однако make_split_iterator ожидает Range и Finder. Так что мне нужно найти последовательность для создания Finder из классификатора. Кто-нибудь знает, как это сделать, или если это вообще возможно?

1 Ответ

9 голосов
/ 31 марта 2011

Вы можете использовать token_finder , как в make_split_iterator(str, token_finder(is_space())) или make_split_iterator(str, token_finder(is_any_of(" "))) и т. Д.

Полный пример, предполагая, что ваша цель - токенизировать (следовательно, token_compress_on)

#include <string>
#include <iostream>
#include <boost/algorithm/string.hpp>
int main()
{
        std::string str = "This is a      test string";

        for( boost::algorithm::split_iterator<std::string::iterator> i
            = make_split_iterator(str, token_finder(
                                        boost::algorithm::is_space(),
                                        boost::algorithm::token_compress_on));
             i != boost::algorithm::split_iterator<std::string::iterator>();
             ++i)
        {
                std::cout << *i << '\n';
        }
}

тестовый прогон: https://ideone.com/vQ2ZM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...