[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    {
    GUY MCLOUGHLIN

    >What's the easiest way to center an arbitrary string on a line?
    }

    program CenterStringDemo;

    { Return a copy of the MainString, with the SubString centered     }
    { within it. Routine passes copies of variables on the STACK,      }
    { taking up more STACK space than the one below, however variable  }
    { strings passed as parameters are not permanently changed.        }
    {                                                                  }
    function CenterStr1(MainString, SubString : String) : String;
    Var
      InsertPos  : byte;
      TempString : string;
    begin
      TempString := MainString;
      InsertPos  := succ((length(MainString) - length(SubString)) div 2);
      move(SubString[1], TempString[InsertPos], length(SubString));
      CenterStr1 := TempString;
    end;

    { Center a sub-string withing the main-string. Routine uses VAR    }
    { parameters which pass pointers to the actual variable being      }
    { passed, making the changes permanent and saving on STACK space.  }
    {                                                                  }
    procedure CenterStr2(var MainString : string; var SubString : string);
    var
      InsertPos : byte;
    begin
      InsertPos := succ((length(MainString) - length(SubString)) div 2);
      move(SubString[1], MainString[InsertPos], length(SubString))
    end;

    var
      SubStr,
      MainStr,
      TempStr : string;

    BEGIN
      SubStr  := '----------';
      MainStr := '012345678901234567890123456789';
      { Return string with sub-string centered in main-      }
      { string. Neither sub-string or main-string variables  }
      { are permanently affected.                            }
      TempStr := CenterStr1(MainStr, SubStr);
      writeln(SubStr);
      writeln(MainStr);
      writeln(TempStr);
      writeln;

      { Position sub-string in the center of main-string.    }
      { Changes to main-string are permanent.                }
      CenterStr2(MainStr, SubStr);
      writeln(SubStr);
      writeln(MainStr);
      writeln(TempStr)
    END.

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]