Форум «Всё о Паскале» _ Задачи _ Рекурсивная функция
Автор: Restinpiece 13.12.2007 20:58
У меня вот такая задача в Delphi: Задана строка, которая содержит в себе правильную запись со скобками, например ((ав)с(d((l)f))). Удалить из строки все символы, кроме скобок. Задачу нужно решить с помощью рекурсивной процедуры или функции. Вроде функция сделана, но почему то работает не совсем правильно:оставляет только первіе четыре скобки. Помогите пожалуйста, а то не могу понять, в чем причина.
Код
function recurs(s: string): string; begin if (s='') or (pos('(',s)=0) and (pos(')', s)=0) then recurs:='' else if (pos('(',s) > pos(')', s)) and (0< pos(')', s)) or (pos('(',s)=0) then recurs:= ')'+recurs(copy(s, pos(')', s)+1, length(s)-pos(')', s)-2)) else recurs:= '(' +recurs(copy(s, pos('(', s)+1, length(s)-pos('(', s)-2)); end;
Вызываю функцию так:
Код
writeln(recurs('((ав)с(d((l)f)))'));
Автор: Malice 13.12.2007 21:50
А по-простетски нельзя ?
function f(s:string):string; begin if s='' then f:='' else if s[1] in ['(',')'] then f:=s[1] +f(copy (s,2,255)) else f:=f(copy(s,2,255)); end;
Или обязательно иметь ввиду, что выражение со скобками ?
Автор: Restinpiece 14.12.2007 0:50
а, спасибо, так работает. Только не могу понять, почему 255?
Автор: Malice 14.12.2007 1:20
Цитата(Restinpiece @ 13.12.2007 20:50)
а, спасибо, так работает. Только не могу понять, почему 255?
На паскале максимальная длина строки 255 символов, по-этому поставив 255 в любом случае скопируется весь остаток. Но, конечно, лучше поставить (Length(s)-1), будет корректней.