Einzelnen Beitrag anzeigen

ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#29

Re: Stringvergleich nicht wie gewünscht

  Alt 7. Okt 2005, 06:37
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;
Christoph
  Mit Zitat antworten Zitat