How to reverse the middle words of a string in Pascal

1 Answer

0 votes
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

*)

 



answered Dec 25, 2025 by avibootz
...