boost :: tokenizer учитывает отсутствие токенов между разделителями

Я использую boost :: tokenizer, чтобы получить ‘;’ отделенные поля от string,
Я могу получить поля, как показано в коде ниже, но у меня есть 2 вопроса:

  1. Есть ли какая-либо функция, которую предоставляет токенизатор, чтобы узнать количество токенов в строке на основе предоставленного разделителя?
  2. Предположим, что тестовая строка имеет 3 поля a;b;c , Следующий фрагмент кода напечатает их все. Но мне нужно напечатать пустые поля тоже. Например. в случае строки a;;;b;c токен также должен содержать ничего такого как 2-й и 3-й элемент. Или, другими словами, 2-й и 3-й токены должны быть пустыми.
#include <boost/tokenizer.hpp>
namespace std;
namespace boost;
int main()
{
string data="a;;;;b;c";
boost::char_separator<char> obj(";");
boost::tokenizer<boost::char_separator<char> > tokens(data,obj);
cout<<endl<<tokens.countTokens();
for(boost::tokenizer<boost::char_separator<char> >::iterator it=tokens.begin();
it!=tokens.end();
++it)
{
std::cout<<*it<<endl;
}
}

2

Решение

1) Вы можете просто посчитать разницу между концом и началом.

const size_t count = std::distance(tokens.begin(), tokens.end());

2) Вы должны просто построить разделитель справа.

boost::char_separator<char> obj(";", "", boost::keep_empty_tokens);

Живой пример

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]