Mir wurde gesagt, keine Strings wie string1 < string2 zu vergleichen, weil einige Compiler auf diese Weise nicht richtig funktionieren. Gibt es einen Grund, compare() über die Operatoren! =, ==, <, < =,>,> = zu verwenden?Warum compare() für Strings verwenden?
Antwort
Die Idee, dass "einige Compiler nicht richtig funktionieren" ist absurd.
Wenn Sie C-Strings über char*
Zeiger sind zu vergleichen, dann ist die =
, !=
, <=
... Operatoren vergleichen die Zeiger, die Saiten nicht sie zu zeigen. Verwenden Sie in diesem Fall stattdessen die strcmp()
-Funktion. Aber da Sie nach der compare
Funktion fragen, fragen Sie eindeutig nicht nach C-Style Strings, sondern nach C++ - Style std::string
Objekten.
Wenn Sie vergleichen std :: string-Objekte, werden die Gleichheit und Vergleichsoperatoren korrekt funktionieren. Jeder Runtime-Bibliotheksfehler, der sie zum Scheitern brachte, würde abgefangen werden, bevor die Implementierung beendet wird.
Die compare
Funktion bietet ein bisschen mehr Funktionalität. Insbesondere können Sie eine Teilzeichenfolge einer der Zeichenfolgen, die verglichen werden, und nicht die gesamte Zeichenfolge angeben.
Lesen Sie die Dokumentation (z. B. unter cppreference.com) und entscheiden Sie, ob Sie diese zusätzliche Funktionalität benötigen. Wenn Sie dies nicht tun, dann werden die ==
,, <=
, <
, >=
, >
Operatoren auf std::string
Objekte funktionieren gut. Ihr Verhalten ist in der Funktion compare()
definiert.
Es gibt auch einige länderspezifische Probleme, aber es gibt wahrscheinlich keine Notwendigkeit für Sie über die, die gerade noch betroffen zu sein.
Funktioniert die Vergleichsfunktion, auch wenn die Zeichen nicht Standard sind? IE Arabisch, Chinesisch oder Sonderzeichen? Nur aus Neugier. – Caperneoignis
@Caperneoignis: Es hängt davon ab, was Sie mit "Arbeit" meinen. Es hängt davon ab, wie die Charaktere dargestellt werden. Die '==' et al-Operatoren sind in der Funktion 'compare()' definiert, so dass beide die gleichen Vor- und Nachteile haben. Lesen http://en.cppreference.com/w/cpp/string/basic_string/compare gibt Ihnen mehr Informationen, als ich Ihnen geben kann. –
Danke @Keith Thompson. – Caperneoignis
Als Benutzer here anmerkt, gibt es 2-3 weitere Operationen, wenn Sie == verwenden. Aber das ist ein kleines kleines Problem, wenn Sie es sogar als eins behandeln können.
Aber vergleichen() hat einige Dinge, die wirklichen Probleme sein kann - es gibt 0 zurück, wenn die Strings gleich sind, was sehr verwirrend sein kann, und dieser Operator erfordert ein wenig mehr Code.
Also, der einzige Nachteil ist die Lesbarkeit, die wie ein Schmerz sein kann, so dass ich nicht empfehlen() mit vergleichen, sie (die meisten) ihre Vor- und Nachteile teilen Berücksichtigung ...
- 1. Verwenden von Beyond Compare für Visual Diff in TortoiseHg
- 2. Python - Warum etwas anderes als uuid4() für eindeutige Strings verwenden?
- 3. Warum verwenden Flux-Architekturbeispiele Konstanten für Aktionstypen anstelle von Strings?
- 4. MSXML string-compare Problem
- 5. Warum werden Strings "Strings" genannt?
- 6. ISR für Timer Compare Match läuft nicht
- 7. Wo kann ich DrawInRect für Strings verwenden?
- 8. Warum verwenden wir nicht == Zum Vergleichen von Strings in Matlab
- 9. Verwenden überladener Strings
- 10. Dataty Compare Rows
- 11. Warum können wir C-Strings nicht als SELs verwenden?
- 12. So verwenden Strings in RewriteCond
- 13. JavaScript-Identitätsoperator für Strings
- 14. Warum verwenden nicht mehr Projekte Ruby-Symbole anstelle von Strings?
- 15. Sollte ich mb_ * oder iconv_ * Funktionen für Multibyte-Strings verwenden?
- 16. Wie kann ich Beyond Compare 3 als diff3-cmd für svn verwenden?
- 17. Java compare integer und bigInteger
- 18. Beyond Compare for Object Instances
- 19. Beyond Compare 2 ignore case
- 20. Deep Compare-Sets in Java
- 21. Verwenden von Strings und Arraylist
- 22. Welche Codierung verwenden normale Python-Strings?
- 23. Wie konfiguriere ich Beyond Compare 3 für die Eclipse-Konfliktlösung?
- 24. SSDT Schema Compare behält die Unterschiede für Benutzer?
- 25. Wie bekomme ich den Wert für 'Option Compare' zur Laufzeit?
- 26. Wann ich Strings oder Symbole in CLIPS verwenden soll
- 27. Kann ich Strings, Singles usw. für "" und "Zero" verwenden?
- 28. Ruby-Koans: Warum Liste von Symbolen konvertieren Strings
- 29. Wie std :: mit einem Compare-Objekt finden?
- 30. Warum strings.xml in Android verwenden?
I‘ m sicher wird eine Google-Suche gute Informationen zum Vergleich von Strings liefern. – Almo
http://stackoverflow.com/a/9159670/1806780 –
sucht string.compare (http://www.cplusplus.com/reference/string/string/compare/) –