Java有一个方便的split方法:
String str = "The quick brown fox";
String[] results = str.split(" ");
有没有一种简单的方法可以在C ++中做到这一点?
C ++标准库算法非常普遍地基于迭代器而不是具体的容器。不幸的是,这使得很难split
在C ++标准库中提供类似于Java的函数,即使没有人认为这样做会很方便。但是它的返回类型是什么?std::vector<std::basic_string<…>>
?也许可以,但是随后我们被迫执行(可能是多余的和昂贵的)分配。
取而代之的是,C ++提供了多种方法来基于任意复杂的定界符来分割字符串,但是它们都没有像其他语言那样被很好地封装。大量方法可以填充整个博客文章。
最简单的说,您可以迭代使用std::string::find
直到您点击std::string::npos
,然后使用提取内容std::string::substr
。
用于在空格上分割的更流畅(和惯用但基本的)版本应使用std::istringstream
:
auto iss = std::istringstream{"The quick brown fox"};
auto str = std::string{};
while (iss >> str) {
process(str);
}
使用std::istream_iterator
s,还可以使用其迭代器范围构造函数将字符串流的内容复制到向量中。
多个库(例如Boost.Tokenizer)提供特定的标记器。
更高级的拆分需要正则表达式。C ++std::regex_token_iterator
为此特别提供了:
auto const str = "The quick brown fox"s;
auto const re = std::regex{R"(\s+)"};
auto const vec = std::vector<std::string>(
std::sregex_token_iterator{begin(str), end(str), re, -1},
std::sregex_token_iterator{}
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句