Есть ли в C ++ эквивалентная функция PHP explode ()?

Возможный дубликат:
Разделение строки в C ++

В PHP explode() Функция возьмет строку и разделит ее на массив, разделяющий каждый элемент указанным разделителем.

Есть ли эквивалентная функция в C ++?

19

Решение

Вот простой пример реализации:

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

32

Другие решения

Стандартная библиотека не содержит прямого эквивалента, но ее довольно легко написать. Будучи 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;
}
11

По вопросам рекламы [email protected]