C клавиатуры вводится произвольная строка символов. Группы символов, разделенные...

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

C клавиатуры вводится произвольная строка символов. Группы символов, разделенные пробелами и не имеющие пробелов внутри, будем называть словами. Написать программу, которая удаляет все слова с нечетными номерами. Вывести полученную строку на экран. Длина строки не более 100 символов.


Информатика (15 баллов) | 37 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

//Скучное, школьное
//Pascal ABC.NET 3.1 сборка 1219

Var
 s:string;
 i:integer;
begin
readln(s);
s:=s.Trim;
i:=1;
while i<=length(s)-1 do<br>if (s[i]=' ') and (s[i+1]=' ') then delete(s,i,1) else inc(i);
var ars:=s.Split;
s:='';
i:=1;
while i<=ars.length-1 do<br> begin
  s:=s+ars[i]+' ';
  i:=i+2;
 end;
writeln(s);
end.

Пример ввода:
С понедельника точно начну писать документацию. Вот пока немного годноты.
Пример вывода:
понедельника начну документацию. пока годноты. 

(38.6k баллов)
0 голосов

Решение, быть может и не тривиальное, но за 5 баллов ломать голову, как это сделать "по-школьному" мне не захотелось. Да и не требовалось по условию... даже язык программирования не был указан.

// PascalABC.NET 3.1, сборка 1256 от 21.06.2016
begin
  var s:=ReadlnString('>');
  var m:=s.Matches('(\S+)').Select(x->(x.Index+1,x.Value.Length));
  // получили последовательность элементов вида <позиция><длина>,
  // отражающих положение слов в строке.
  var n:=m.Count; // количество слов
  if n.IsEven then Dec(n);
  while n>0 do begin
    var e:=m.ElementAt(n-1);
    Delete(s,e.Item1,e.Item2);
    Dec(n,2)
    end;
  Writeln(s)
end.

Тестовое решение
>    Карл  у  Клары   украл кораллы Клара    у   Карла украла кларнет  
     у     украл  Клара       Карла  кларнет

(142k баллов)