Необходимо написать программу на Паскале, которая будет удалять из строки все стоящие подряд одинаковые элементы, если их больше 2. Примеры: aabbbc - больше aac; aabbbac - больше c;

Необходимо написать программу на Паскале, которая будет удалять из строки все стоящие подряд одинаковые элементы, если их больше 2. Примеры: aabbbc -> aac; aabbbac -> c;
Гость
Ответ(ы) на вопрос:
Гость
var s:string; c:char; i:integer; begin write('s = '); readln(s); i:=1; while (i+2<=length(s)) do  if(s[i]=s[i+1])and(s[i+1]=s[i+2])   then begin         c:=s[i];        while (i<=length(s))and(c=s[i]) do delete(s,i,1);        i:=1;        end   else i:=i+1; writeln(s); end.
Гость
Рекурсивный подход.(Символы тоже удаляет) function grad(s:string):string; var i:byte; detect:boolean; begin while i < length(s) - 2 do begin inc(i); if (s[i] = s[i+1]) and (s[i] = s[i+2]) then {проверка последовательности из 3 елементов} begin delete(s,i,3); {если да - удаляем их} detect:=True; {логическая переменная регистрирует изменение строки} end;end; if detect = True then s:=grad(s); {если строку изменили , проверяем не появились ли там еще последовальности} grad:=s;  end; var s:string; begin readln(s); writeln(grad(s)); end.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы