我希望在单个字符或字符串上拆分字符串.我想使用,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)
当我需要使用单个字符拆分字符串时,这正是我所做的.
在下面的代码中,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)