Unterschied zwischen CompareStr und '=' für Strings in Delphi

8

Ich möchte nur den Unterschied zwischen CompareStr und = für den Vergleich von Strings in Delphi wissen. Beide ergeben das gleiche Ergebnis.

%Vor%

Beide zeigen die Nachricht Palindrome.

    
CyprUS 23.06.2011, 10:11
quelle

4 Antworten

16

Verwenden Sie CompareStr nicht, wenn Sie nur sehen möchten, ob zwei Strings gleich sind, aber wenn Sie wissen möchten, wie sich ein String relativ zu einem anderen vergleicht. Es wird einen Wert kleiner als 0 zurückgeben, wenn das erste Argument zuerst ascibetisch erscheint und es einen Wert größer als Null zurückgibt, wenn das erste Argument nach dem zweiten gehört.

Ohne CompareStr könnten Sie Code wie folgt haben:

%Vor%

Das vergleicht str1 und str2 zweimal. Mit CompareStr können Sie einen der Zeichenfolgenvergleiche ausschneiden und durch einen günstigeren Ganzzahlvergleich ersetzen:

%Vor%

Wie Gerrys Antwort erklärt, Die Funktion ist besonders nützlich beim Sortieren von Funktionen, insbesondere da sie die gleiche Schnittstelle wie andere Vergleichsfunktionen wie CompareText und AnsiCompareStr hat. Die Sortierfunktion ist eine Vorlagenmethode und jede der Funktionen dient als Vergleich Strategie .

Wenn Sie nur nach Gleichheit suchen möchten, verwenden Sie den Operator = - es ist einfacher zu lesen. Verwenden Sie CompareStr , wenn Sie die zusätzliche Funktionalität benötigen.

    
Rob Kennedy 23.06.2011, 13:59
quelle
5

Angenommen, Str1 und Str2 sind Strings und nicht Arrays (oder Listen) oder Strings, ist die erste Version effizienter, da die zweite Version zuerst str1[i] und str2[i] in zwei neue Strings kopiert und dann a aufruft Funktion mit dem damit verbundenen Aufwand.

Die erste Version vergleicht einfach die einzelnen Zeichen, auf die str1 [i] und str2 [i]

verweisen

Wenn Sie nur interessiert sind, ob Strings gleich sind, verwenden Sie = . Wenn Sie wissen wollen, ob Strings gleich sind ODER welche Zeichenfolge größer ist, verwenden Sie CompareStr .

CompareStr ist besonders nützlich beim Sortieren von Listen, z. B. mit TList.Sort(CompareFunc) oder TStringList.Sort(CompareFunc)

Wenn Sie Vergleiche zwischen Groß- und Kleinschreibung vermeiden möchten, verwenden Sie CompareText.

    
Gerry Coll 23.06.2011 11:16
quelle
1

Das Ergebnis ist nicht das gleiche, wenn die verglichenen Zeichenfolgen nicht gleich sind. Das Ergebnis von CompareStr oder AnsiCompareStr ist vom Integer-Typ und zeigt einige weitere Informationen, wie diese Strings im Vergleich zueinander stehen. Werfen Sie einen Blick auf Ссылка

    
jszpilewski 23.06.2011 10:24
quelle
1

Abgesehen von dem Rückgabewert (Ganzzahl gegen Boolesch) sagt der Code aus CompareStr, dass die Vergleichsoperation auf dem 8-Bit-Ordinalwert jedes Zeichens basiert und nicht vom aktuellen Benutzergebietsschema betroffen ist. So wie es aussieht, war CompareStr ursprünglich Teil der FastCode-Routinen und ist im Wesentlichen eine optimierte Ansi-Version, die aus Leistungsgründen entwickelt wurde. Ich habe immer mit "=", "& lt;", "& gt;" usw.

gesprochen     
Misha 23.06.2011 10:36
quelle

Tags und Links