Dein zweites Beispiel kann Ärger machen, da Du die Länge des String nicht berücksichtigst.
Ich versuche gerade Nachzuvollziehen an welcher Stelle es böse ausgehen könnte, deswegen kommentare rangeklebt damit ihr seht was ich anstellen wollte, vielleicht ist umsetzung falsch
Delphi-Quellcode:
function RemDelLeadChar(const Input: string; const LeadChar: Char): string;
var
i: Integer;
begin
i := 1; // String Index auf 1 (der erste) setzen
Result := Input; // result mit input initialisieren
if ((Length(Input) > 0) and (Input[1] = LeadChar)) then // wenn länge +1 und mit LeadChar anfängt dann...
begin // block anfangen damit delete korrekt ausgeführt wird
while (Input[i] = LeadChar) do inc(i); // solange leadchar vorne [i] vorkommt gib +1 auf i
Delete(Result, 1, i-1); // da wenigstens ein LeadChar vorkam kann man bedenkenlos ausführen
end; // ende vom länge/leadchar block
if Result = '' then Result := LeadChar; // falls string leer ist, gib wenigstens ein leadchar wieder
end;