Задача 9 урок 16

Задача 9 урок 16

Пользователь вводит исходную строку s.
Ваша программа должна вернуть другую строку, в которой все смежные (соседние) повторяющиеся символы должны быть "удалены" (т.е. повторов в новой строке быть не должно)

var s: string;
    i, t, n: integer;
begin
  writeln('Vvedite stroku');
  readln(s);
  n:=length(s);
  while (n>0) do
    begin
    for i:=1 to length(s) do
      begin
        if s[i]=s[i+1] then  //если соседние символы равны
          begin
            n:=n-1;   //по n выход из while
            for t:=(i+1) to length(s) do
              s[t]:=s[t+1]; //переформируем остаток строки после совпадения
          end;
      end;
    end;
  writeln(s);
  readln();
end.
vedro-compota's picture

1)

for t:=(i+1) to length(s) do
              s[t]:=s[t+1];

-- не должно быть выхода за пределы массива

_____________
матфак вгу и остальная классика =)

var s, s2: string;
    i: integer;
begin
  writeln('Vvedite stroku');
  readln(s);
  t:=1;
    for i:=1 to length(s) do
        begin
          if i=1 then
            s2:=s2+s[i]
          else if s[i]<>s[i-1] then
            begin
              s2:=s2+s[i];
            end;
        end;
  writeln(s2);
  readln();
end.
vedro-compota's picture

лучше просто перебирать до значения length(s) - 1

_____________
матфак вгу и остальная классика =)