RS - ReadString: Возвращает значение типа string, введенное с клавиатуры.
AdjacentGroup: Группирует одинаковые подряд идущие элементы, получая последовательность массивов.
SelectMany: Проецирует каждый элемент последовательности в новую последовательность и объединяет результирующие последовательности в одну последовательность.
.Len - .Length: Длина массива.
.Str - .JoinToString: Преобразует последовательность символов в строку, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
.Pr - .Print: Выводит последовательность символов на экран, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
PascalABC.NET 3.7:
###RS.AdjacentGroup.SelectMany(x → x.Len >= 3 ? x.Len + x[0] : x.Str).PrПояснение:
RS - ReadString: Возвращает значение типа string, введенное с клавиатуры.
AdjacentGroup: Группирует одинаковые подряд идущие элементы, получая последовательность массивов.
SelectMany: Проецирует каждый элемент последовательности в новую последовательность и объединяет результирующие последовательности в одну последовательность.
.Len - .Length: Длина массива.
.Str - .JoinToString: Преобразует последовательность символов в строку, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
.Pr - .Print: Выводит последовательность символов на экран, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
Пример работы:
Pascal
var
s : string = 'Вчера лиса Алиса пришла к коту Базилио и поинтересовалась его здоровьем.';
i : integer;
s1, sR : string;
begin
s:=s+' ';
i :=1;
sR :='';
s1:='';
while i <= length(s) do begin
if (s[i] = ' ') then begin
if s1[1] <> UpperCase(s1[1]) then
sR := sr + s1 + ' ';
s1:=''
end
else
s1:=s1 + s[i];
inc(i);
end;
delete(sR, length(sR), 1);
print(sR);
end.
А вот на PascalABC.Net. заметно короче будет
begin
var s := 'Вчера лиса Алиса пришла к коту Базилио и поинтересовалась его здоровьем.';
var a := s.ToWords.Where(v -> (v.First <> v.First.ToUpper)).JoinIntoString();
println(a);
end.