Дана строка содержащая любые символы кроме букв. под "словом" будем понимать последовательность символов, ограниченную пробелами или стоящую в конце или начале строки. между словами может быть несколько пробелов. так же пробелы могут быть в конце или начале строки. написать процедуру, которая удалит из строки слова в которых есть цифры и при этом сохранит все пробелы. например строка: "ufd uue8dx 888 dmas 9" будет преобразована в строку: "ufd dmas " использовать заголовок: procedure preobraz(var stroka: string);

LanaStreet LanaStreet    2   23.09.2019 17:30    6

Ответы
Donisimys000000 Donisimys000000  21.08.2020 14:19
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<pwi then begin
      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.

Дана строка содержащая любые символы кроме букв. под словом будем понимать последовательность симв
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика