Удалить текст между скобками - 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.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д