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

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

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

5533g

вернуть:

53g

для строки:

b5ghh55788oooggtttttt

вернуть:

b5gh578ogt

var i,N,p: integer;
    s: string;
  //N - символ у которго будет дубликат следующий(его убрать)
procedure moover(var s: string; N: integer); //удаление и смещение влево
  begin
    for i := low(s) to high(s) do
      begin
        if (i < N) then
        else if(i < length(s)) then
          s[i] := s[i + 1]
        else
          s[i]:=' ';
      end;
  end;

begin
  writeln('vvedi stoky');
  readln(s);
  for p := low(s) to high(s) do
    begin
      while ((s[p] = s[p + 1]) and (s[p] <> ' ')) do // пока в строке есть дубликаты
        begin
          N := p;
          moover(s, N);
        end;
    end;
  for p := 1 to high(s) do
    write(s[p]);
  readln();
end.  
vedro-compota's picture

 for p := low(s) to high(s) do
    begin
      while ((s[p] = s[p + 1]) 

выход за пределы массива

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

var i,N,p: integer;
    s: string;
  //N - символ у которго будет дубликат следующий(его убрать)
procedure moover(var s: string; N: integer); //удаление и смещение влево
  begin
    for i := low(s) to high(s) do
      begin
        if (i < N) then
        else if(i < length(s)) then
          s[i] := s[i + 1]
        else
          s[i]:=' ';
      end;
  end;

begin
  writeln('vvedi stoky');
  readln(s);
  for p := low(s) to high(s) - 1 do
    begin
      while ((s[p] = s[p + 1]) and (s[p] <> ' ')) do // пока в строке есть дубликаты
        begin
          N := p;
          moover(s, N);
        end;
    end;
  for p := 1 to high(s) do
    write(s[p]);
  readln();
end.
vedro-compota's picture

решение засчитано

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