ich hab keine ahnung, wieso comparestring sich so verhaelt, wie du es berichtest.
entweder liefert die funktion nicht das verhalten, das du brauchst, oder du interpretierst die rueckgabewerte falsch.
ich wuerde eine funktion schreiben, die nur fuer byteidentische strings 0 zurueckgibt. fuer alle anderen faelle wird die bytedifferenz der ersten ungleichen zeichen zurueckgegeben. bei ungleichlangen strings wird eventuell die differenz des ersten ueberlangen zeichens zum null-zeichen zurueckgegeben.
damit verhaelt sich die funktion, die ich schreiben wuerde, nahezu identisch zum C aequivalent strcmp(). einziger unterschied: strcmp() returnt nur -1, 0 oder 1 waehrend ich auch <-1 und >1 zurueckgeben wuerde.
uebrigens:
"stringa = stringb" tut genau was du willst.
gross/kleinschreibung wird beachtet und auch die laenge.
Delphi-Quellcode:
function strcmp(a, b:
string): integer;
{ strcmp(foo,foo) = 0
strcmp(FOO,foo) = -32
strcmp(foo,faa) = 14
strcmp(faa,foo) = -14
strcmp(foox,foo) = 120
strcmp(foo,foox) = -120 }
var
i: integer;
c,d: byte;
begin
result := 0;
i := 1;
repeat
if a[i] <> b[i]
then
begin
result := ord(a[i]) - ord(b[i]);
end;
inc(i);
until (i > length(a))
or (i > length(b));
if length(a) > length(b)
then
result := ord(a[length(b)+1])
else if length(a) < length(b)
then
result := -ord(b[length(a)+1]);
{ ANSI C behaviour compatibility: }
{ result := byte(result > 0) - byte(result < 0); }
end;