Я использую boost :: tokenizer, чтобы получить ‘;’ отделенные поля от string
,
Я могу получить поля, как показано в коде ниже, но у меня есть 2 вопроса:
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;
}
}
1) Вы можете просто посчитать разницу между концом и началом.
const size_t count = std::distance(tokens.begin(), tokens.end());
2) Вы должны просто построить разделитель справа.
boost::char_separator<char> obj(";", "", boost::keep_empty_tokens);
Других решений пока нет …