Замена подстроки в строке
Найти в строке определенную последовательность символов (подстроку) и заменить ее другой.
Описание переменных:
- s, s_old, s_new - исходная строка, заменяемая подстрока, вставляемая подстрока;
- i – номер символа строки, с которого начинается подстрока;
- l_old – длина заменяемой подстроки.
Алгоритм решения задачи:
- Ввести строку, подстроку, которую требуется заменить, и подстроку, которую требуется вставить на место прежней.
- Найти место вхождения подстроки в строку с помощью функции pos().
- Удалить старую подстроку с помощью процедуры delete().
- Вставить новую подстроку, используя процедуру insert().
Программа на языке Паскаль:
var
s,s_old,s_new: string;
i,l_old: byte;
begin
write('Insert string: ');
readln(s);
write('What change? ');
readln(s_old);
l_old := length(s_old);
write('What to replace? ');
readln(s_new);
i := pos(s_old,s);
delete(s,i,l_old);
insert(s_new,s,i);
writeln(s);
end.
Функция pos(subs, s)
ищет вхождение подстроки subs в строке s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s.
Процедура delete(s, start, len)
удаляет из строки s, начиная с позиции start, подстроку длиной len.
Процедура insert(subs, s, start)
вставляет в строку s подстроку subs, начиная с позиции start.
Если в строке несколько одинаковых подстрок, которые требуется заменить на новую подстроку, то следует воспользоваться циклом:
var
s, s_old, s_new: string;
i, l_old: byte;
begin
{Input}
write('Введите строку: ');
readln(s);
write('Введите подстроку, которую требуется заменить: ');
readln(s_old);
l_old := length(s_old);
write('Введите новую подстроку: ');
readln(s_new);
{Solution}
i := 1;
while i <> 0 do begin
i := pos(s_old, s);
if i <> 0 then begin
delete(s, i, l_old);
insert(s_new, s, i);
end;
end;
{Output}
writeln(s);
end.
Пример работы программы:
Введите строку: wsfgw sfkjsfii sf ...
Введите подстроку, которую требуется заменить: sf
Введите новую подстроку: 0000
w0000gw 0000kj0000ii 0000 ...
Пример решения похожей задачи в сообществе VK: Заменить в тексте сочетания букв «abc» на «klm»