gpt4 book ai didi

c++ - 如何在 strtk 的列表中有一个 "custom split()"?

转载 作者:IT老高 更新时间:2023-10-28 22:04:12 25 4
gpt4 key购买 nike

我已阅读 http://www.codeproject.com/KB/recipes/Tokenizer.aspx我想在我的主目录中有最后一个示例(最后,就在所有图表之前)“扩展分隔符谓词”,但是当我分配 token_list 时,我没有得到与文章作者相同的输出标记 vector ,为什么?

如何将真实结果放入列表或 vector 中?我想要这个:

  • 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;
}

最佳答案

我可以在代码项目中得到相同的结果。你使用什么版本的 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

关于c++ - 如何在 strtk 的列表中有一个 "custom split()"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com