Delphi-Quellcode:
function DeleteChar(const s: AnsiString): AnsiString;
var
u: set of AnsiChar;
i: integer;
begin
result := s;
u := [];
i := 1;
while i <= Length(result) do
if result[i] in u then
delete(result, i, 1)
else
begin
Include(u, result[i]);
Inc(i);
end;
end;
Delphi-Quellcode:
function DeleteChar(const s: AnsiString): AnsiString;
var
u: set of AnsiChar;
i: integer;
begin
result := '';
u := [];
for i := 1 to Length(s) do
if not (s[i] in u) then
begin
Include(u, s[i]);
result := result + s[i];
end;
end;
die Ersten sind schneller, gehen aber nur für AnsiStrings (also für String bis Delphi 2007)
Delphi-Quellcode:
function DeleteChar(const s: string): string;
var i, j: integer;
begin
result := s;
i := 1;
while i <= Length(result) do
for j := 1 to i - 1 do begin
if result[i] = result[j] then
Delete(result, i, 1)
end
else
Inc(i);
end;
end;
und das entspricht deinem.
wobei in While- und Repeat-Schleifen in jedem Durchgang die Ausstiegsbedingung neu bewertet wird.