Удалить текст между скобками - 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.
Объяснение кода листинга программы
- Объявляются переменные S, s1, s2 типа String, а также переменные I, B, L типа Integer.
- В цикле читаются строки, которые необходимо удалить между скобками.
- Переменная B инициализируется значением, полученным от функции Pos, которая ищет первое вхождение подстроки s1 в строке S.
- Запускается цикл While, который продолжается до тех пор, пока значение переменной B не станет равным нулю. Это происходит, когда встречена первая скобка.
- Внутри цикла While инициализируется переменная L значением 0. Затем запускается вложенный цикл For, который проходит по каждому символу в строке S, начиная с позиции B и до конца строки (включительно).
- Внутри вложенного цикла For проверяется, совпадает ли текущий символ с подстрокой s2. Если да, то цикл прерывается командой break. В противном случае переменная L увеличивается на 1.
- После завершения вложенного цикла For переменная L используется командой Delete для удаления фрагмента строки S, начиная с позиции B и заканчивая позицией L+1.
- Переменная B обновляется значением, полученным от функции Pos, которая ищет следующее вхождение подстроки s1 в строке S.
- Выводится итоговая строка S.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д