|
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
|
||||||
STL и string04.06.2014, 12:53. Показов 1899. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|