Удалить текст между скобками - Pascal

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

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

Найдите, пожалуйста, ошибку. Эта программа должна удалить все символы, заключенные между круглыми скобками, и вывести результат на экран. Например,

Ввод:

Я пошел в театр (сказал он тихим голосом), скоро вернусь.

Вывод:

Я пошел в театр , скоро вернусь. А у меня такой

вывод:

Я пошел в театр То есть то, что находится после скобок на экран не выводится. Найдите ошибку.
Листинг программы
  1. Program EX_4_STRING;
  2. Uses crt;
  3. Var a: string;
  4. i,m,j: integer;
  5. b: array [1..100] of integer;
  6. Begin
  7. clrscr;
  8. Write(' Vvegite stroku ');
  9. Readln(a);
  10. m:=0;
  11. For i:= 1 to length(a) do
  12. Begin
  13. if a[i]='('
  14. then
  15. begin
  16. for j:= i to length(a) do
  17. begin
  18. if a[j]=')'
  19. then
  20. inc(m);
  21. b[m]:=j;
  22. end;
  23. break;
  24. end;
  25. end;
  26. delete(a,i,b[m]-i+1);
  27. Writeln('');
  28. For i:= 1 to length(a) do
  29. Write(a[i]);
  30. Readln;
  31. end.

Решение задачи: «Удалить текст между скобками»

textual
Листинг программы
  1. Var S,s1,s2 : String;
  2.     I, B, L : Integer;  { I - для цикла, B - скобка открывается, L - длинна фрагмента в скобках }
  3. Begin
  4. //~~~~~~~~~~~~~~~~~~~~~~~~~~
  5. readln(s);
  6. writeln ('убрать ');
  7. readln(s1);
  8. readln(s2);
  9. //~~~~~~~~~~~~~~~~~~~~~~~~~~
  10.   B := Pos(s1,S);  { Ищем первую скобку }
  11.   While B<>0 do  { Если скобка найдена... }
  12.   Begin
  13.     L := 0;
  14.     For I := B to Length(S) do  { ищем закрытие скобки }
  15.     Begin
  16.       If S[I]=s2 then break else L := L + 1;
  17.     End;
  18.     Delete(S,B,L+1);  { удаляем фрагмент }
  19.     B := Pos(s1,S); { поиск следующей скобки }
  20.   End;
  21.   WriteLn(S);
  22. End.

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

  1. Объявляются переменные S, s1, s2 типа String, а также переменные I, B, L типа Integer.
  2. В цикле читаются строки, которые необходимо удалить между скобками.
  3. Переменная B инициализируется значением, полученным от функции Pos, которая ищет первое вхождение подстроки s1 в строке S.
  4. Запускается цикл While, который продолжается до тех пор, пока значение переменной B не станет равным нулю. Это происходит, когда встречена первая скобка.
  5. Внутри цикла While инициализируется переменная L значением 0. Затем запускается вложенный цикл For, который проходит по каждому символу в строке S, начиная с позиции B и до конца строки (включительно).
  6. Внутри вложенного цикла For проверяется, совпадает ли текущий символ с подстрокой s2. Если да, то цикл прерывается командой break. В противном случае переменная L увеличивается на 1.
  7. После завершения вложенного цикла For переменная L используется командой Delete для удаления фрагмента строки S, начиная с позиции B и заканчивая позицией L+1.
  8. Переменная B обновляется значением, полученным от функции Pos, которая ищет следующее вхождение подстроки s1 в строке S.
  9. Выводится итоговая строка S.
  10. Программа завершается.

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


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

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

7   голосов , оценка 4.429 из 5

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

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

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