使用c++11拆分字符串最简单的方法是什么?
我看过这个post使用的方法,但我觉得应该有一种使用新标准的不那么冗长的方法。
编辑:我想有一个vector<string>的结果,并能够界定在一个单一的字符。
发布于 2012-02-25 04:17:36
std::regex_token_iterator基于正则表达式执行通用标记化。对于单个字符进行简单的拆分,它可能会也可能不会被夸大,但它是有效的,并且不会太冗长:
std::vector<std::string> split(const string& input, const string& regex) {
// passing -1 as the submatch index parameter performs splitting
std::regex re(regex);
std::sregex_token_iterator
first{input.begin(), input.end(), re, -1},
last;
return {first, last};
}发布于 2014-12-17 02:08:15
这里有一种(可能不太冗长)拆分字符串的方法(基于您提到的post )。
#include <string>
#include <sstream>
#include <vector>
std::vector<std::string> split(const std::string &s, char delim) {
std::stringstream ss(s);
std::string item;
std::vector<std::string> elems;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
// elems.push_back(std::move(item)); // if C++11 (based on comment from @mchiasson)
}
return elems;
}发布于 2016-09-21 19:27:13
下面是一个使用boost拆分字符串并使用提取的元素填充向量的示例。
#include <boost/algorithm/string.hpp>
std::string my_input("A,B,EE");
std::vector<std::string> results;
boost::algorithm::split(results, my_input, boost::is_any_of(","));
assert(results[0] == "A");
assert(results[1] == "B");
assert(results[2] == "EE");https://stackoverflow.com/questions/9435385
复制相似问题