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

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

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

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

Ввод:

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

Вывод:

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

вывод:

Я пошел в театр То есть то, что находится после скобок на экран не выводится. Найдите ошибку.
Program EX_4_STRING;
Uses crt;
Var a: string;
    i,m,j: integer;
    b: array [1..100] of integer;
Begin
clrscr;
 
Write(' Vvegite stroku ');
Readln(a);
    m:=0;
    For i:= 1 to length(a) do
     Begin
     if a[i]='('
     then
        begin
        for j:= i to length(a) do
            begin
            if a[j]=')'
            then
                 inc(m);
                 b[m]:=j;
            end;
        break;
        end;
     end;
    delete(a,i,b[m]-i+1);
   Writeln('');
   For i:= 1 to length(a) do
    Write(a[i]);
    Readln;
    end.

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

textual
Листинг программы
Var S,s1,s2 : String;
    I, B, L : Integer;  { I - для цикла, B - скобка открывается, L - длинна фрагмента в скобках }
Begin
//~~~~~~~~~~~~~~~~~~~~~~~~~~
readln(s);
writeln ('убрать ');
readln(s1);
readln(s2); 
//~~~~~~~~~~~~~~~~~~~~~~~~~~
  B := Pos(s1,S);  { Ищем первую скобку }
  While B<>0 do  { Если скобка найдена... }
  Begin
    L := 0;
    For I := B to Length(S) do  { ищем закрытие скобки }
    Begin
      If S[I]=s2 then break else L := L + 1;
    End;
    Delete(S,B,L+1);  { удаляем фрагмент }
    B := Pos(s1,S); { поиск следующей скобки }
  End;
  WriteLn(S);
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
Похожие ответы