Дана строка содержащая любые символы кроме русских букв. Под "словом" будем понимать...

0 голосов
179 просмотров

Дана строка содержащая любые символы кроме русских букв.

Под "словом" будем понимать последовательность символов, ограниченную пробелами или стоящую в конце или начале строки. Между словами может быть несколько пробелов. Так же пробелы могут быть в конце или начале строки.

Написать процедуру, которая удалит из строки слова в которых есть цифры и при этом сохранит все пробелы.

Например строка: "ufd uue8dx 888 dmas 9" будет преобразована в строку: "ufd dmas "

Использовать заголовок:

procedure Preobraz(var Stroka: string);


Информатика (395 баллов) | 179 просмотров
0

там есть пробелы, просто скопировалось неправильно

0

нет, просто из д/з

0

углубленка

Дан 1 ответ
0 голосов
Правильный ответ
PascalABC.NET 3.3.5, сборка 1660 от 20.04.2018
Внимание! Если программа не работает, обновите версию!

procedure Preobraz(var Stroka:string);
begin
  var bq:=new Queue<(integer,integer)>;
  foreach var m in Stroka.Matches('\s+') do
    bq.Enqueue((m.Index,m.Length));
  var wq:=new Queue<(integer,string)>;
  foreach var m in Stroka.Matches('\S+') do
    if m.Value.Any(t->t in ['0'..'9']) then wq.Enqueue((m.Index,''))
    else wq.Enqueue((m.Index,m.Value));
  Stroka:='';
  var pbi,pwi:integer;
  while (bq.Count>0) and (wq.Count>0) do begin
    (pbi,pwi):=(bq.Peek[0],wq.Peek[0]);
    if pbi      Stroka:=Stroka+bq.Peek[1]*' ';
      bq.Dequeue
      end
    else begin
      Stroka:=Stroka+wq.Peek[1];
      wq.Dequeue
      end
    end;
  while bq.Count>0 do begin
    Stroka:=Stroka+bq.Peek[1]*' ';
    bq.Dequeue
    end;
  while wq.Count>0 do begin
    Stroka:=Stroka+wq.Peek[1];
    wq.Dequeue
    end
end;

begin
  var s:=ReadlnString;
  Preobraz(s);
  s:='<'+s+'>'; // чтобы было видно, как работает
  s.Println
end.

image
(150k баллов)