答案 0 :(得分:32)
这是一个简单的示例实现:
#include <string>
#include <vector>
#include <sstream>
#include <utility>
std::vector<std::string> explode(std::string const & s, char delim)
{
std::vector<std::string> result;
std::istringstream iss(s);
for (std::string token; std::getline(iss, token, delim); )
{
result.push_back(std::move(token));
}
return result;
}
用法:
auto v = explode("hello world foo bar", ' ');
注意:@Jerry写入输出迭代器的想法对于C ++更为惯用。事实上,你可以提供两者;输出迭代器模板和生成向量的包装器,以获得最大的灵活性。
注2:如果您想跳过空标记,请添加if (!token.empty())
。
答案 1 :(得分:11)
标准库不包含直接等效文件,但编写起来非常简单。作为C ++,你通常不想专门写一个数组 - 相反,你通常想要将输出写入迭代器,所以它可以转到数组,向量,流等。这会给这个一般顺序的东西:
template <class OutIt>
void explode(std::string const &input, char sep, OutIt output) {
std::istringstream buffer(input);
std::string temp;
while (std::getline(buffer, temp, sep))
*output++ = temp;
}