【问题标题】:How to have a "custom split()" in a list with strtk?如何在带有strtk的列表中拥有“自定义拆分()”?
【发布时间】:2011-09-16 11:21:23
【问题描述】:

我已经阅读了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;
}

【问题讨论】:

    标签: c++ split tokenize


    【解决方案1】:

    我可以在代码项目中得到相同的结果。你使用什么版本的 gcc?我的 gcc 版本如下。

    g++ (GCC) 4.5.2
    Copyright (C) 2010 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    

    更新: 我测试的代码在这里:https://gist.github.com/1037493

    【讨论】:

    • 我使用 VisualStudio 2010 Ultimate。
    • 我用vc10试过了。 "cl -Dstrtk_no_tr1_or_boost -DWIN32 -I"C:\Program Files\Boost_1_46_0" -I. test.cxx "。但我得到了相同的结果。(工作良好)
    • 例如,当我将 token_list 放入向量中时,我的结果并不好。当我在 set to set 模式下看到 token_list 的值时,我得到的是我写的值,而不是 3 个正确的值。例如,如何将实际值放入向量中?
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多