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

可能重复:
在C ++中分割一个字符串

在PHP中, explode()函数将采用一个字符串并将其分割为一个数组,用指定的分隔符分隔每个元素。

C ++中是否有等价的函数?


这是一个简单的示例实现:

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


标准库不包括直接的等价物,但它是一个相当容易编写的库。 作为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, input, sep))
        *output++ = temp;
}
链接地址: http://www.djcxy.com/p/19567.html

上一篇: Is there an equivalent in C++ of PHP's explode() function?

下一篇: Split a string into an array in C++