Возможный дубликат:
Разбиение строки на 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", ' ');
Примечание: идея Джерри о написании на выходе итератора более идиоматична для 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; }