program ReverseMiddleWords;
function ReverseWord(const s: string): string;
var
i: integer;
begin
ReverseWord := '';
for i := Length(s) downto 1 do
ReverseWord := ReverseWord + s[i];
end;
function ReverseMiddle(const line: string): string;
var
words: array[1..64] of string;
count, i: integer;
temp, part: string;
begin
count := 0;
temp := line;
{ Split into words }
while temp <> '' do
begin
i := Pos(' ', temp);
if i = 0 then
begin
Inc(count);
words[count] := temp;
temp := '';
end
else
begin
part := Copy(temp, 1, i - 1);
if part <> '' then
begin
Inc(count);
words[count] := part;
end;
Delete(temp, 1, i);
while (Length(temp) > 0) and (temp[1] = ' ') do
Delete(temp, 1, 1);
end;
end;
{ If fewer than 3 words, nothing to reverse }
if count < 3 then
begin
ReverseMiddle := line;
Exit;
end;
{ Reverse only middle words }
for i := 2 to count - 1 do
words[i] := ReverseWord(words[i]);
{ Rebuild the string }
ReverseMiddle := words[1];
for i := 2 to count do
ReverseMiddle := ReverseMiddle + ' ' + words[i];
end;
var
s: string;
begin
s := 'Hello how are you today';
Writeln(ReverseMiddle(s));
end.
(*
run:
Hello woh era uoy today
*)