是否有一个等价于C++的PHP的explode() 函数?

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

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Splitting a string in C++

在PHP中,explode()函数将把一个字符串和它砍上热情的阵列切割每一元的specified delimiter。。。。。。。 </P >

是有一个标准箱函数在C + +??????? </P >


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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;
}

用途:

1
auto v = explode("hello world foo bar", ' ');

注意:杰瑞对输出迭代器的编写思想对C++更为实用。实际上,您可以同时提供这两种功能:输出迭代器模板和产生向量的包装器,以实现最大的灵活性。

注2:如果要跳过空的令牌,请添加if (!token.empty())


标准库不包括直接等效的库,但编写起来相当容易。作为C++,通常不想对数组进行专门的编写——相反,通常您需要将输出写入迭代器,因此它可以进入数组、向量、流等,这将给出一个关于这个一般顺序的东西:

1
2
3
4
5
6
7
8
9
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;
}