PHP的explode()函数是否有C++的等价物?

ref*_*med 19 php c++ arrays explode equivalent

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

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

C++中是否有等效的功能?

Ker*_* SB 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;
}
Run Code Online (Sandbox Code Playgroud)

用法:

auto v = explode("hello world foo bar", ' ');
Run Code Online (Sandbox Code Playgroud)

注意:@Jerry写入输出迭代器的想法对于C++更为惯用.事实上,你可以提供两者; 输出迭代器模板和生成向量的包装器,以获得最大的灵活性.

注意2:如果要跳过空标记,请添加if (!token.empty()).

  • @ user1944429:此移动避免复制字符串数据.由于你在循环中不再使用它,因此向量可以直接"窃取"该数据而无需复制它. (4认同)

Jer*_*fin 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;
}
Run Code Online (Sandbox Code Playgroud)