Как иметь «настраиваемый split ()» в списке с помощью strtk?

Я прочитал http: // www. codeproject.com/KB/recipes/Tokenizer.aspx, и я хочу иметь последний пример (в конце, непосредственно перед всеми графиками) «Расширение предикатов разделителя» в моем основном, но я не получаю того же выводить токены, как это делает автор статьи, когда я назначаю token_list вектору, почему?

Как поместить реальный результат в список или вектор? Я хочу получить это:

  • list0 abc
  • list1 123, mno xyz
  • list2 i \, jk

Но у меня есть что-то вроде:

  • list0 abc; "123, mno xyz", i \, jk
  • list1 123, mno xyz ", i \, jk
  • list2 i \, jk

Пример исходного кода:

class extended_predicate
{
public:

   extended_predicate(const std::string& delimiters)
   : escape_(false),
     in_bracket_range_(false),
     mdp_(delimiters)
   {}

   inline bool operator()(const unsigned char c) const
   {
      if (escape_)
      {
         escape_ = false;
         return false;
      }
      else if ('\\' == c)
      {
         escape_ = true;
         return false;
      }
      else if ('"' == c)
      {
         in_bracket_range_ = !in_bracket_range_;
         return true;
      }
      else if (in_bracket_range_)
         return false;
      else
         return mdp_(c);
   }

   inline void reset()
   {
      escape_ = false;
      in_bracket_range_ = false;
   }

private:

   mutable bool escape_;
   mutable bool in_bracket_range_;
   mutable strtk::multiple_char_delimiter_predicate mdp_;
};

int main()
{
   std::string str = "abc;\"123, mno xyz\",i\\,jk";
   strtk::std_string::token_list_type token_list;
   strtk::split(extended_predicate(".,; "),
                str,
                std::back_inserter(token_list),
                strtk::split_options::compress_delimiters);

   return 0;
}

18
задан 18 revs, 3 users 99% 6 June 2013 в 19:03
поделиться