使用单个字符或仅一个字符串来提升拆分

edA*_*a-y 8 c++ string boost

我希望在单个字符或字符串上拆分字符串.我想使用,boost::split因为boost字符串是我们基本字符串处理的标准(我不希望混合几种技术).

在我可以做的单个字符的情况下split(vec,str,is_any_of(':')),我想知道是否有一种方法只指定一个字符.它可能会提高性能,但更重要的是我认为只需一个字符就可以更清晰地编写代码,因为is_any_of传达了我想要的不同含义.

为了匹配字符串,我不知道使用什么语法.我不想构建一个正则表达式; 一些简单的语法就好了split(vec,str,match_str("::").

Ada*_*nek 10

我正在寻找相同的答案,但我找不到一个.最后我设法自己制作了一个.

您可以使用它std::equal_to来形成所需的谓词.这是一个例子:

boost::split(container, str, std::bind1st(std::equal_to<char>(), ','));
Run Code Online (Sandbox Code Playgroud)

当我需要使用单个字符拆分字符串时,这正是我所做的.


Ise*_*ria 3

在下面的代码中,using namespace boost为了简洁起见,让我假设一下。
至于对字符进行分割,如果仅algorithm/string允许的话, is_from_range可能会达到目的:

split(vec,str, is_from_range(':',':'));
Run Code Online (Sandbox Code Playgroud)

或者,如果lambda允许:

split(vec,str, lambda::_1 == ':');
Run Code Online (Sandbox Code Playgroud)

或者如果允许准备专用谓词:

struct match_char {
  char c;
  match_char(char c) : c(c) {}
  bool operator()(char x) const { return x == c; }
};

split(vec,str, match_char(':'));
Run Code Online (Sandbox Code Playgroud)

至于匹配字符串,正如David Rodri'guez提到的,似乎没有这样的方法split。如果iter_split允许的话,也许下面的代码就可以达到目的:

iter_split(vec,str, first_finder("::"));
Run Code Online (Sandbox Code Playgroud)

  • C++11 答案:`[](char c){ return c==':'}` 即本机 lambda。 (4认同)