[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) некоторый объем памяти (например, равный строке-источнику), чтобы уменьшить
количество операций выделения/освобождения/копирования памяти в процессе добавления
фрагментов в строку-приемник.
Если сам не осилишь, то покажу код.
Успехов. Анатолий.