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

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

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

Не могу устранить ошибку в работе программы. Если строка состоит из многократно повторяющихся символов, например шшшшшшшшшшшш, а подстрока, например, шш, то программа не работает. Помогите исправить.
Листинг программы
  1. Program invers;
  2. uses strutils, strings,crt;
  3. Procedure Input (var x,y:string);
  4. begin
  5. write ('Введите строку: ');
  6. readln (x);
  7. write ('Введите подстроку: ');
  8. read (y);
  9. end;
  10. Procedure Conclusion (var x: string);
  11. begin
  12. write (x);
  13. end;
  14. function Invers (var x,y:string):string;
  15. var m,n: integer;
  16. k,i,j: string;
  17. begin
  18. while (n>0) or (n<0) do
  19. begin
  20. n:=0;
  21. n:=pos (y,x);
  22. if (n=0) then break
  23. else
  24. k:=ReverseString(y);
  25. i:=copy (x,1,n-1);
  26. j:=copy (x,n+length(y),length(x));
  27. x:=i+k+j;
  28. end;
  29. end;
  30. var
  31. x,y: string;
  32. n,m: integer;
  33. begin
  34. n:=0;
  35. clrscr;
  36. Input (x,y);
  37. n:=pos(y,x);
  38. if n=0 then writeln (y,' не является подстрокой введённой строки ')
  39. else
  40. n:=pos (y,x);
  41. Invers (x,y);
  42. Conclusion (x);
  43. readln;
  44. readln;
  45. end.

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

textual
Листинг программы
  1. var
  2.   s, ss: String;
  3.   i, j, p, q: Integer;
  4.   t: Char;
  5. begin
  6.   Write('   Строка: '); ReadLn(s);
  7.   Write('Подстрока: '); ReadLn(ss);
  8.   i:=1; j:=Length(s)-Length(ss)+1;
  9.   while i<=j do begin
  10.     if Copy(s,i,Length(ss))=ss then begin
  11.       p:=i; Inc(i,Length(ss)); q:=i-1;
  12.       while p<q do begin
  13.         t:=s[p]; s[p]:=s[q]; s[q]:=t; Inc(p); Dec(q);
  14.       end;
  15.     end else Inc(i);
  16.   end;
  17.   Write('Результат: '); WriteLn(s);
  18. end.

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы