|
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
|
||||||
STL и string04.06.2014, 12:53. Показов 1902. Ответов 13
Метки нет (Все метки)
начал тут 1 задачу на форуме решать
в text1 какой-то текст, мы ищем в нем слова str и после них вставляем слова str2 вообщем я не могу придумать решение при помощи STL, по идее применяю search. записываю результат в итератор , затем insert в позицию этого итератора, если it1==txt.end() то выходим ....вообещм подскажите не умею решать такого плана задачи пока что =(
0
|
||||||
| 04.06.2014, 12:53 | |
|
Ответы с готовыми решениями:
13
Размышления о string из STL [STL] Работа со std::string Undefined symbol string (STL) |
|
|
||||||
| 04.06.2014, 13:44 | ||||||
|
Тонкость в том, что в классе string (впрочем как и в vector) нет подходящей ф-и insert. Проблема возникает из-за того, что вставка может привести к перераспределению памяти для контейнера и как следствие все итераторы станут валидными. Думаю здесь лучше выполнять вставку копированием. Т.е. вводим вспомогательную строку в которую будем записывать исходную строку кусками. В тех местах где будет вхождение искомой подстроки мы добавляем к временной другую подстроку и продолжаем поиск подстроки дальше.
Примерная реализация(не проверял) :
1
|
||||||
|
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
|
||
| 04.06.2014, 13:49 [ТС] | ||
|
0
|
||
|
|
||||||
| 04.06.2014, 14:12 | ||||||
|
insert_iterator это врапер для метода insert. Что в лоб, что по лбу. Можно конечно использовать посимвольную вставку
Однако не все так плохо. У нас ведь есть списки. Посимвольная вставка для них имеет такую же сигнатуру, что и для других контейнеров, но выполняется за константное время. Эти соображения наводят нас на мысль, что все же лучше использовать не контейнер string, а list.
3
|
||||||
| 04.06.2014, 15:24 | |
|
0
|
|
| 04.06.2014, 17:09 | |
|
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||||
| 04.06.2014, 18:48 | |||||||||
Сообщение было отмечено dzrkot как решение
Решение
Либо я чего-то не понял, либо одно из двух...
http://www.cplusplus.com/refer... ng/insert/ От слов к коду:
1
|
|||||||||
|
Master of Orion
|
||||||
| 04.06.2014, 18:55 | ||||||
Сообщение было отмечено Psilon как решение
Решение
dzrkot, а что если регулярками? Они как раз для таких случаев и нужны. За один проход чтобы осуществить все замены.
Добавлено через 3 минуты
1
|
||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 04.06.2014, 18:57 | |
|
Psilon, из пушки по воробьям. Такое же двойное использование памяти + регулярки же. Краткость записи, конечно, соблазнительна, но они явно для задач более сложных.
0
|
|
|
Master of Orion
|
||
| 04.06.2014, 19:03 | ||
|
0x10, двойное использование памяти - возможно, но вот скорость должна быть выше. Насколько я помню, там идет всего лишь один проход по строке КМП-алгоритмом с построением суффиксного дерева. А в случае с find будет N+1 проходов по строке. При этом при insert афайк приходится все равно докидывать конец массива дальше, чтобы вставляемая строка влезла. Ну и краткость, конечно, куда без неё
![]() Добавлено через 2 минуты
)
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 04.06.2014, 19:27 | ||
|
Добавлено через 21 минуту Пононял тесты - ок, верю - с регулярками получается быстрее.
1
|
||
|
Комп_Оратор)
|
||
| 05.06.2014, 03:39 | ||
![]() Мощность холивара пропорциональна количеству вставок в одну и ту же строку. ![]() Psilon, вчера я чуток помучился с replace С#. Причем если бы меня спросили, то ответил бы, что ф-ция член возвращает новую копию строки. Но никто (и я сам себя) не спросил... Пару часов ломился. Вызываю, а строка как дуська не меняется! Потом посмотрел в документацию и в первых же словах нашёл. ![]() Родство ситуации в том, что в многобайтовой кодировке replace-фрагмент может не соответствовать замещаемому по размеру и получается та же дилемма, что и при вставке. Авторы почли за лучшее сделать то, о чём Ilot говорит. Или я не понял как всегда.
1
|
||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
| 05.06.2014, 08:30 | |
|
boost::replace
0
|
|
|
|
|||||
| 05.06.2014, 08:42 | |||||
|
Спасибка за то что никогда не умел работать с size_type и npos.
0
|
|||||
| 05.06.2014, 08:42 | |
|
Помогаю со студенческими работами здесь
14
Еще одно размышление о string из STL STL String. Вывести слово и после него количество символов System::String^ vs stl::std::string Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|