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

Задача

Найти в строке указанную подстроку и заменить ее на новую. Строку, ее подстроку для замены и новую подстроку вводит пользователь.

Пояснение к задаче и алгоритм решения

  1. Найти начало (индекс первой буквы) подстроки в строке.
  2. Измерить длину подстроки.
  3. Удалить подстроку из строки, начиная с позиции ее первой буквы и на ее длину.
  4. Вставить новую подстроку в позицию, где раньше была первая буква старой подстроки.

Однако данный алгоритм не является универсальным для всех языков программирования. В каждом языке есть свои методы для работы со строками, хотя большинство из них схожи.

Исходный код на языке программирования Pascal

var
    s,s_old,s_new: string;
    i,l_old: byte;
begin
    write('Строка: ');
    readln(s);
    write('Ее заменяемая подстрока: ');
    readln(s_old);
    write('Новая подстрока: ');
    readln(s_new);
 
    i := pos(s_old,s);
    l_old := length(s_old);
    delete(s,i,l_old);
    insert(s_new,s,i);
 
    writeln(s);
end.

Пример(ы) выполнения программы на языке Pascal

Строка: Здравствуйте, Змей Горыныч. Сегодня совещание в 10.00
Ее заменяемая подстрока: Змей Горыныч
Новая подстрока: Арчибальт Аристархович
Здравствуйте, Арчибальт Аристархович. Сегодня совещание в 10.00

Исходный код на языке программирования Python

print('Строка: ')
s = input()
print('Ее заменяемая подстрока: ')
s_old = input()
print('Новая подстрока: ')
s_new = input()
 
i = s.find(s_old)
l = len(s_old)
s = s[0:i] + s_new + s[i+l:]
print(s)

Пример(ы) выполнения программы на языке Python

Строка:
11 22 33
Ее заменяемая подстрока:
33
Новая подстрока:
77
11 22 77

Особенности решения на языке программирования Python

В данном случае новая строка формируется путем взятия срезов из строки и вставки между ними новой подстроки.

Старая подстрока исключается, т.к. берется срез до ее первого символа и срез после ее последнего символа. Последний символ подстроки определяется сложением индекса ее первого символа с ее длинной.

Исходный код на языке программирования Basic

print "Строка: ";
input s$
print "Ее заменяемая подстрока: ";
input s_old$
print "Новая подстрока: ";
input s_new$
 
i = instr(s$,s_old$)
l = length(s_old$)
 
s_start$ = left(s$,i-1)
s_end$ = right(s$,length(s$) - i - l+1)
 
s$ = s_start$ + s_new$ + s_end$
 
print s$

Пример(ы) выполнения программы на языке Basic

Строка: abc def class
Ее заменяемая подстрока: class
Новая подстрока: ord
abc def ord

Особенности решения на языке программирования Basic

В Basic-256, в отличие от алгоритма приведенного выше, "вырезаются" части строк до подстроки и после нее. После этого новая строка "собирается" из трех частей: части перед страрой подстрокой, новой подстрокой и части после старой подстроки.

Тема

Строки

Уровень сложности

Средний

Дата публикации

Комментарий

В Python:
1) в случае если во введенной строке будет несколько подстрок s_old, произойдет замена только первого совпадения, что уже не соответствует условию задачи:


Строка:
11 22 333 11 4465
Ее заменяемая подстрока:
11
Новая подстрока:
44
44 22 333 11 4465

2)Если вводить заменяемую подстроку s_old значение, которого нет в строке s, программа работает неверно:


Строка:
11 22 33
Ее заменяемая подстрока:
44
Новая подстрока:
77
11 22 3771 22 33

Вариант решения с выведением сообщения об отсутствии в строке искомой подстроки также с заменой всех встречаемых в строке введенных подстрок:

s=input('Введите строку: ')
ps=input('Введите подстроку 1: ')
ch=input('Введите подстроку 2 для замены подстроки 1: ')
n=0
for i in range(len(s)):
    n=s.find(ps,n)
    if n==-1:
        break
    else:
        s=s[:n]+ch+s[n+len(ps):]
if i>0:
    print(s)
else:
    print("В данной строке нет подстроки",ps)