Отправляет email-рассылки с помощью сервиса Sendsay

За 2012-06-08

[prg] Re: C++. Функция замены в строке одной подстроки на другую

Приветствую всех.

> пытаясь применить метод replace, но тоже пока никаких результатов.

Если ты собираешься выполнять однократную замену, то replace подойдет, а если
ты хочешь заменить все вхождения подстроки в строке, то это слишком накладно,
т.к. на каждой итерации строка будет собираться снова с остатком, в котором замены
еще не выполнены. А тебе нет необходимости собирать строку, пока все вхождения
подстроки не обработаны.

Можно попробовать такой вариант: использовать две позиции (first и last.
0. Изначально first=0.
1. При помощи find перемещаем last на первое вхождение подстроки, начиная от
first.
2. Добавляем (метод append) фрагмент от first до last в строку-приемник.
3. Если last не вышла за пределы строки-источника, то в строку-приемник добавляем
подстроку-заменитель.
4. Пропускаем в строке-источнике подстроку, смещая first на длину подстроки.
5. Идем к пункту 1.
Понятно, что это все делается в цикле с проверкой выхода позиций first и last
за границу строки и проверкой исходных аргументов на корректность.
Для целей производительности можно в строке-приемнике сразу зарезервировать (метод
reserve) некоторый объем памяти (например, равный строке-источнику), чтобы уменьшить
количество операций выделения/освобождения/копирования памяти в процессе добавления
фрагментов в строку-приемник.
Если сам не осилишь, то покажу код.

Успехов. Анатолий.

   "i_chay" 2012-06-08 21:37:47 (#2478106)

[prg] Re: C++. Функция замены в строке одной подстроки на другую

здравствуйте александр. функции поиска и замены находятся в библиотеке
afxdlgs.h. приведу первую строку,с помощью которой вы сможете найти и
посмотреть нужный класс:
class CFindReplaceDialog : public CCommonDialog

сначала с помощью функции CReate создайте в вашей программе немодальное
диалоговое окно. для того,чтобы что-то заменить- его сначала надо найти.
поэтому сперва нужно организовать поиск,а затем вызвать функцию замены.
чтобы всё правильно работало надо написать немало программного кода.

   2012-06-08 06:53:42 (#2476926)