Vergleichen von strings, c++
Ich habe eine Frage:
Lassen Sie uns sagen, es gibt zwei std::string
s, und ich will um Sie zu vergleichen, es gibt die Möglichkeit, mit der compare()
Funktion der string
Klasse, aber mir ist auch aufgefallen, dass es möglich ist mit einfachen < > !=
Operatoren (beide Fälle sind möglich, auch wenn ich weiß nicht die <string>
Bibliothek).
Kann mir jemand erklären, warum die compare()
Funktion liegt vor, wenn ein Vergleich gemacht werden kann, mit einfachen Operatoren?
btw ich benutze Code::Blocks 13.12
hier ein Beispiel von meinem code:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::getline;
int main()
{
string temp1, temp2;
cout << "Enter first word: ";
getline (cin,temp1);
cout << "Enter second word: ";
getline (cin,temp2);
cout << "First word: " << temp1 << endl << "Second word: " << temp2 << endl;
if (temp1 > temp2)
{
cout << "One" << endl;
}
if (temp1.compare(temp2) < 0)
{
cout << "Two" << endl;
}
return 0;
}
- Manchmal ist es nützlich, positiv, null oder negative Zahl ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
.compare()
gibt eine Ganzzahl zurück, die ein Maß für den Unterschied zwischen den beiden strings.0
zeigt an, dass die beiden Zeichenfolgen als gleich verglichen werden.operator==
einfach gibt einen booleschen Wert zurück, der angibt, ob die strings gleich sind oder nicht.Wenn Sie nicht brauchen, die extra Details, können Sie genauso gut mit
==
.Diesen code geben wird -1 als Ergebnis. Dies ist aufgrund der ersten nicht passenden Zeichen der zu vergleichenden string 'h' ist geringer oder erscheint nach dem 'c' in alphabetischer Reihenfolge, auch wenn die im Vergleich string, 'Mensch' ist länger als 'Katze'.
Finde ich den return-Wert beschrieben in cplusplus.com ist genauer die:
Darüber hinaus IMO cppreference.com's Beschreibung ist einfacher und bisher besten schildere meine eigenen Erfahrungen.
Bezüglich der Frage,
Relativ zu
<
und==
, diecompare
Funktion ist konzeptionell einfacher und in der Praxis kann effizienter sein, da es verhindert zwei Vergleiche pro Element für normale Reihenfolge der Einträge.Als ein Beispiel für Einfachheit, für kleine integer-Werte Sie können einen compare-Funktion, wie diese:
ist hoch effizient.
Nun für eine Struktur
Auszudrücken versuchen diese lexikografisch vergleichen, direkt in Bezug auf die
<
Sie wind-up mit horrenden Komplexität und Ineffizienz, relativ gesehen.Mit C++11, für die Einfachheit allein gewöhnlichen kleiner-als-Vergleich basiert lexikografisch vergleichen kann sehr einfach implementiert Tupel-Vergleich.
auto int f(int, int) -> int;
Schauder. Warum wird der trailing return type?