Замена подстроки в строке

Задача

Найти в строке определенную последовательность символов (подстроку) и заменить ее другой.

Решение

Описание переменных: 

s, s_old, s_new – исходная строка, заменяемая подстрока, вставляемая подстрока;
i – номер символа строки, с которого начинается подстрока;
l_old – длина заменяемой подстроки.

Алгоритм решения задачи: 

  1. Ввести строку, подстроку, которую требуется заменить, и подстроку, которую требуется вставить на место прежней.
  2. Найти место вхождения подстроки в строку с помощью функции pos().
  3. Удалить старую подстроку с помощью процедуры delete().
  4. Вставить новую подстроку, используя процедуру 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);
readln
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 ...

Тема

Строки

Уровень

Комбинированные задачи

Добавить комментарий