Vorweg: Ich bin überhaupt kein Pointerfachmann und bin mit dem "richtigen" Pos ganz zufrieden.
Ich frage mich nur, warum du ständig die Größe des Strings ändern willst? Das da dürfte doch auch reichen.
Delphi-Quellcode:
function Pos(const aSubString, aString: string;
const aCaseSensitive : Boolean = False): Integer;
var
CurrentPosition :Integer;
pContent, pTempContent :PChar;
pSearch , pTempSearch :PChar;
begin
if aCaseSensitive then
begin
pContent := PChar(aString);
pSearch := PChar(aSubString);
end
else
begin
pContent := PChar(AnsiUpperCase(aString));
pSearch := PChar(AnsiUpperCase(aSubString));
end;
Result := -1;
CurrentPosition := 1; // EDIT: das "richtige" Pos liefert die Position basierend auf 1 ;)
while pContent^ <> #0 do
begin
if pContent^ = pSearch^ then
begin
pTempContent := pContent;
pTempSearch := pSearch;
while (pTempSearch^ <> #0) and (pTempSearch^ = pTempContent^) do
begin
Inc(pTempContent);
Inc(pTempSearch);
end;
// Suchstring wurde bis zum #0 durchlaufen -> Match
if pTempSearch^ = #0 then
begin
Result := CurrentPosition;
Break;
end;
end;
Inc(CurrentPosition);
Inc(pContent);
end;
end;