Ist string :: compare zuverlässig, um die alphabetische Reihenfolge zu bestimmen?

8

Einfach gesagt, wenn die Eingabe immer im selben Fall ist (hier in Kleinbuchstaben), und wenn die Zeichen immer ASCII sind, kann man string :: compare verwenden, um die alphabetische Reihenfolge von zwei Strings zuverlässig zu bestimmen?

Also, mit stringA.compare(stringB) , wenn das Ergebnis 0 ist, sind sie gleich, wenn es negativ ist, kommt stringA alphabetisch vor stringB, und wenn es positiv ist, kommt stringA nach?

    
MPelletier 06.12.2009, 06:02
quelle

5 Antworten

8

Laut den Dokumenten von cplusplus.com

  

Die Elementfunktion gibt 0 zurück, wenn alle   die Charaktere im Vergleich   Inhalte vergleichen gleich, ein Negativ   Wert, wenn das erste Zeichen das tut   Nicht Übereinstimmung entspricht weniger in der   Objekt als in der Vergleichszeichenkette,   und ein positiver Wert im Gegenteil   Fall.

So wird es Strings in ASCII-Reihenfolge sortieren, die alphabetisch für englische Strings (ohne diakritische Zeichen oder andere erweiterte Zeichen) desselben Falls sein wird.

    
Moishe Lettvin 06.12.2009, 06:06
quelle
3

Ja, solange alle Zeichen in beiden Zeichenfolgen den gleichen Fall haben und solange beide Zeichenfolgen nur aus Buchstaben bestehen, funktioniert dies.

compare ist jedoch eine Memberfunktion, also würden Sie es so nennen:

%Vor%     
James McNellis 06.12.2009 06:05
quelle
2

In% C ++ ist string die Instanziierung der Vorlagenklasse basic_string mit den Standardparametern: basic_string<char, char_traits<char>, allocator<char> > . Die Vergleichsfunktion in der Vorlage basic_string verwendet die Funktion char_traits<TChar>::compare , um den Ergebniswert zu bestimmen.

Für std::string ist die Reihenfolge diejenige des Standard-Zeichencodes für die Implementierung (Compiler) und dies ist normalerweise die ASCII-Reihenfolge. Wenn Sie eine andere Reihenfolge benötigen (beispielsweise möchten Sie {a, a, à, ä) als äquivalent ansehen), können Sie basic_string mit Ihrer eigenen char_traits<> -Implementierung instanziieren. Bereitstellung eines anderen compare -Funktionszeigers.

    
quelle
0

ja ,

  

Die Elementfunktion gibt 0 zurück, wenn alle   die Charaktere im Vergleich   Inhalte vergleichen gleich, ein Negativ   Wert, wenn das erste Zeichen das tut   Nicht Übereinstimmung entspricht weniger in der   Objekt als in der Vergleichszeichenkette,   und ein positiver Wert im Gegenteil   Fall.

     

Bei String-Objekten ist das Ergebnis von a   Zeichenvergleich hängt nur davon ab   sein Zeichencode (d. h. sein ASCII   code ), so dass das Ergebnis begrenzt ist   alphabetische oder numerische Reihenfolge   Bedeutung.

    
aJ. 06.12.2009 06:07
quelle
0

Die Spezifikationen für die C- und C ++ - Sprachgarantie für die lexikalische Reihenfolge, 'A' & lt; "B" & lt; "C" ... & lt; "Z". Das gleiche gilt für Kleinbuchstaben.

Die Reihenfolge der Textstellen ist ebenfalls garantiert: '0' & lt; ... & lt; "9".

Wenn Sie mit mehreren Sprachen arbeiten, erstellen viele Personen ein Array von Zeichen. Das Array wird nach dem Zeichen durchsucht. Anstatt Zeichen zu vergleichen, werden die Indizes verglichen.

    
Thomas Matthews 06.12.2009 19:05
quelle

Tags und Links