Как я должен toknizer строки в char, используя boost

Я пытаюсь разбить строку на символ с помощью boost

Нынешний буст токенизатор будет токенизироваться на основе пространства

typedef boost::tokenizer<boost::char_separator<char> > tokenizer; boost::char_separator<char> sep(""); tokenizer tokens(str, sep); 

Я ожидаю, что выход будет J е F, но фактический результат является JEF

Всего 1 ответ


это

""

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

" "

является строковым литералом, который содержит один символ - пробел также заканчивается нулевым терминатором. Если вы хотите разделить str = "jef" на пробелы, вам нужно написать что-то вроде этого:

  typedef boost::tokenizer<boost::char_separator<char> >
        tokenizer;
  boost::char_separator<char> sep(" ");
  std::string str = "j e f";
  tokenizer tokens(str, sep);
  for (auto i : tokens)
    cout << i << endl;
  // output
  j
  e
  f

Поскольку имя char_separator предполагает, что оно принимает символы , ваша строка "" содержит символов. Разделение осуществляется путем сравнения символа разделителя с входной строкой. Как вы хотите сделать это сравнение, когда нет символа, чтобы сделать это, то есть "" ?


Есть идеи?

10000