2016-04-12 18 views
-5

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?

+0

I‘ m sicher wird eine Google-Suche gute Informationen zum Vergleich von Strings liefern. – Almo

+0

http://stackoverflow.com/a/9159670/1806780 –

+0

sucht string.compare (http://www.cplusplus.com/reference/string/string/compare/) –

Antwort

3

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.

+0

Funktioniert die Vergleichsfunktion, auch wenn die Zeichen nicht Standard sind? IE Arabisch, Chinesisch oder Sonderzeichen? Nur aus Neugier. – Caperneoignis

+1

@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. –

+0

Danke @Keith Thompson. – Caperneoignis

0

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 ...

Verwandte Themen