Доработка программы. Заменить подстроку в строке на инверсную - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Не могу устранить ошибку в работе программы. Если строка состоит из многократно повторяющихся символов, например шшшшшшшшшшшш, а подстрока, например, шш, то программа не работает. Помогите исправить.
Program invers;
uses strutils, strings,crt;
 
Procedure Input (var x,y:string);
begin
write ('Введите строку: ');
readln (x);
write ('Введите подстроку: ');
read (y);
end;
 
Procedure Conclusion (var x: string);
begin
write (x);
end;
 
function Invers (var x,y:string):string;
var m,n: integer;
k,i,j: string;
begin
   while (n>0) or (n<0) do
     begin
     n:=0;
     n:=pos (y,x);
     if (n=0) then break
     else
     k:=ReverseString(y);
     i:=copy (x,1,n-1);
     j:=copy (x,n+length(y),length(x));
     x:=i+k+j;
     end;
end;
 
var
x,y: string;
n,m: integer;
begin
 n:=0;
 clrscr;
 Input (x,y);
 n:=pos(y,x);
   if n=0 then writeln (y,' не является подстрокой введённой строки ')
   else
  n:=pos (y,x);
  Invers (x,y);
 Conclusion (x);
 readln;
 readln;
end.

Решение задачи: «Доработка программы. Заменить подстроку в строке на инверсную»

textual
Листинг программы
var
  s, ss: String;
  i, j, p, q: Integer;
  t: Char;
begin
  Write('   Строка: '); ReadLn(s);
  Write('Подстрока: '); ReadLn(ss);
  i:=1; j:=Length(s)-Length(ss)+1;
  while i<=j do begin
    if Copy(s,i,Length(ss))=ss then begin
      p:=i; Inc(i,Length(ss)); q:=i-1;
      while p<q do begin
        t:=s[p]; s[p]:=s[q]; s[q]:=t; Inc(p); Dec(q);
      end;
    end else Inc(i);
  end;
  Write('Результат: '); WriteLn(s);
end.

Объяснение кода листинга программы

  1. Объявлены переменные s, ss, i, j, p, q, t типа String и Integer
  2. Пользователю предлагается ввести строку и подстроку
  3. Вычисляются начальный и конечный индексы подстроки в строке
  4. В цикле проверяется, совпадает ли текущий фрагмент строки с подстрокой
  5. Если совпадает, то выполняется цикл, который меняет символы местами
  6. Выводится результат

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы