Есть ли эквивалент в С++ функции PHP explode()? - программирование
Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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 о записи на выходной итератор более идиоматична для С++. Фактически, вы можете предоставить оба; шаблон выход-итератор и обертка, которая создает вектор, для максимальной гибкости.

Примечание 2: Если вы хотите пропустить пустые токены, добавьте if (!token.empty()).

Ответ 2

Стандартная библиотека не включает прямой эквивалент, но ее довольно легко написать. Являясь С++, вы обычно не хотите писать конкретно в массив, скорее всего, вы, как правило, хотите записать вывод на итератор, чтобы он мог перейти к массиву, вектору, потоку и т.д. Это дало бы что-то в этом общем порядке:

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;
}