Intereting Posts
Как проверить, поддерживает ли curl для ssl? Несоответствие типа данных в выражении критериев с использованием Access через ODBC Не удается получить результаты от SearchQuery () в фратах Как сделать файлы загрузки Opera похожими на другие браузеры? Преобразование плоского массива в дерево с однократным циклом Как преобразовать арабские символы в Unicode с помощью PHP Веб-промежуточное программное обеспечение, применяемое к маршрутам API в Laravel 5.2 RewriteRule – html broken – Как отсутствует css Отладка PHP Mail () и / или PHPMailer Почему этот запрос не вызывает результат mysql_error ()? Подсчитайте все слова, включая числа в строке php Кнопка «Назад браузера» перенаправляется на 1-ю страницу, пока она должна перейти на предыдущую посещенную страницу при использовании пейджинга Facebook SDK v4 для PHP Минимальный пример Извлечь текст из DIV, который встречается на нескольких страницах на веб-сайте, а затем выводить на .txt? BadMethodCallException с сообщением «Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: belongsToMany () '

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

Возможный дубликат:
Разбиение строки на 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; }