在 PHP 的 explode() 函数C++中是否有等效项?

2022-08-30 18:18:05

可能的重复:
在C++中拆分字符串

在PHP中,该函数将获取一个字符串并将其切碎成一个数组,该数组通过指定的分隔符分隔每个元素。explode()

C++中是否有等效函数?


答案 1

下面是一个简单的示例实现:

#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())


答案 2

标准库不包含直接的等效库,但它是一个相当容易编写的库。作为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;
}