3 Stimmen

AnsiStrIComp schlägt beim Vergleich von Zeichenketten in Delphi 2010 fehl

Ich bin etwas verwirrt und hoffe auf Erleuchtung.

Ich verwende Delphi 2010 für dieses Projekt und ich versuche, 2 Strings zu vergleichen.

Die Verwendung des folgenden Codes schlägt fehl

if AnsiStrIComp(PAnsiChar(sCatName), PAnsiChar(CatNode.CatName)) = 0 then...

weil laut Debugger nur das erste Zeichen jeder Zeichenkette verglichen wird (d.h. wenn sCatName es "Automobiles" , PAnsiChar(sCatName) es "A" ).

Ich möchte in der Lage sein, Zeichenketten zu vergleichen, die in verschiedenen Sprachen vorliegen, z. B. Englisch und Japanisch.

In diesem Fall suche ich nach einer Übereinstimmung, aber ich habe andere Funktionen für die Sortierung usw. verwendet, wo ich wissen muss, wie die Zeichenfolgen vergleichen (weniger als, gleich, größer als).

5voto

Andreas Rejbrand Punkte 100651

Ich nehme an, dass sCatName y CatNode.CatName sind definiert als string s (= UnicodeString s)?. Das sollten sie sein.

Es besteht keine Notwendigkeit, die Zeichenketten in null-terminierte Zeichenketten umzuwandeln! Dies ist (meistens) nur erforderlich, wenn Sie mit der Windows-API arbeiten.

Wenn Sie die Gleichheit von zwei Zeichenketten testen wollen, verwenden Sie SameStr(S1, S2) (Groß- und Kleinschreibung wird beachtet) oder SameText(S1, S2) (Groß- und Kleinschreibung wird nicht berücksichtigt), oder einfach S1 = S2 im ersten Fall. Alle drei Optionen liefern true o false abhängig von der Gleichheit der Zeichenketten.

Wenn Sie einen numerischen Wert auf der Grundlage der Ordnungswerte der Zeichen erhalten möchten (wie beim Sortieren), verwenden Sie CompareStr(S1, S2) o CompareText(S1, S2) . Diese geben eine negative ganze Zahl, Null oder eine positive ganze Zahl zurück.

(Möglicherweise sollten Sie die Ansi- Funktionen: AnsiSameStr , AnsiSameText , AnsiCompareStr y AnsiCompareText ; diese Funktionen verwenden das aktuelle Gebietsschema. Die nicht Ansi- Funktionen akzeptieren einen dritten, optionalen Parameter, der explizit das zu verwendende Gebietsschema angibt).

Update

Bitte lesen Sie die Kommentare von Remy Lebeau zur Ursache des Problems.

0voto

mbq Punkte 18256

Was ist mit einfachen sCatName=CatNode.CatName ? Wenn sie es sind strings sollte es funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X