Сплит строки
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Не подскажите как грамотно на С++ сделать «сплит» строки? Т.е. надо входную строку разбить на подстроки по одному или нескольким символам-разделителям. Как это сделать на С я в общих чертах представляю. Как это сделать со string — не понимаю. Доставать из string сырую строку вроде как-то не по полюсовому.
А вообще-то в итоге мне надо получить char *arg[] для передачи в системный вызов. Тоже вопрос как этот массив техничнее сделать.
Поправочка:
char *const arg[]
Например, такой вариант:
http://rextester.com/DOCR17423
Спасибо за ответ!
Крута. Основная идея алгоритма понятна. Но WTF! Как???
Зачем здесь темплейт? Итератор для string вроде можно и напрямую описать.
Строку
template <typename...> class Container = std::vector
я вообще не понял. Т.е. смысл то понятен: что бы функция возвращала вектор пар итераторов. Но не могли бы вы объяснить почему надо написать именно так?С Func тоже не понял. Опять таки общий смысл «зачем» понятен, непонятно «как». Если смотреть по коду, Funk — некий тип. В функцию вы передаете переменную этого типа, которую дальше используете как указатель на функцию. Причем Funk не содержит никакой информации о контракте (кажется это так называется?) функции, и даже нет никаких указаний, что это вообще указатель на функцию. Каким образом лямбда из main без ошибок компиляции просачивается в вызов find_if?
И еще не понял зачем в функции нужно условие в цикле
do { ... } while (first != end)
. Мне кажется, что здесь можно использовать безконечный цикл. Не?Да просто валялась писанина.
Несмотря на то, что здесь шаблон,
оно будет не везде работать,
потому как писалось через одно место.
А если захотим wstring поделить или какой-нибудь другой тип?
Причем это не обязательно должны быть символы.
По сути, это не разделение строки,
а разделение последовательности
по заданному правилу.
Здесь шаблонный параметр шаблона.
В силу того, что функция сама
инстанцирует шаблон контейнера
с заданным параметром,
то приходится передавать шаблон,
хотя можно и помудрить получше.
Ознакомьтесь со статьями о шаблонах:
https://code-live.ru/post/cpp-template-functions/
https://code-live.ru/post/cpp-templates-part-2/
Возможно, они будут Вам полезны.
Да, тип будет выведен из инициализатора.
Из лямбда-выражения будет создан класс замыкания.
Собственно, Func и будет иметь тип класса замыкания.
И создается само замыкание — объект класса замыкания.
Ознакомьтесь с понятием функтора,
это многое поставит на свои места. :)
ЕМНИП, то изначально внутренности
выглядели иначе, а после
переделки условие так и осталось,
в принципе, можно выкинуть.