Ich habe eine Frage:
Nehmen wir an, es gibt zwei std::string
s, und ich möchte sie vergleichen. Es gibt die Möglichkeit, die Funktion compare()
der Klasse string
zu verwenden, aber ich habe auch festgestellt, dass das mit einfachen < > !=
Operatoren möglich ist (Beide Fälle sind möglich, auch wenn ich die <string>
-Bibliothek nicht einschließe).
Kann jemand erklären, warum die Funktion compare()
existiert, wenn ein Vergleich mit einfachen Operatoren möglich ist?
Ich verwende Code :: Blocks 13.12 Hier ist ein Beispiel für meinen Code:
%Vor% .compare()
gibt eine Ganzzahl zurück, die ein Maß für den Unterschied zwischen den beiden Zeichenfolgen ist.
0
gibt an, dass die beiden Zeichenfolgen als gleichwertig verglichen werden. operator==
gibt einfach einen booleschen Wert zurück, der angibt, ob die Strings gleich sind oder nicht.
Wenn Sie die zusätzlichen Details nicht benötigen, können Sie auch einfach ==
verwenden.
Dieser Code wird als Ergebnis -1 ergeben. Dies liegt daran, dass das erste nicht übereinstimmende Zeichen der verglichenen Zeichenfolge "h" niedriger ist oder nach "c" in alphabetischer Reihenfolge erscheint, obwohl die verglichene Zeichenfolge "human" länger ist als "cat".
Ich finde, dass der in cplusplus.com beschriebene Rückgabewert genauer ist, was -: 0: Sie vergleichen gleich & lt; 0: Entweder ist der Wert des ersten Zeichens, das nicht übereinstimmt, in der verglichenen Zeichenkette niedriger oder alle verglichenen Zeichen stimmen überein, aber die verglichene Zeichenkette ist kürzer. mehr als 0: Entweder ist der Wert des ersten Zeichens, das nicht übereinstimmt, in der verglichenen Zeichenkette größer oder alle verglichenen Zeichen stimmen überein, aber die verglichene Zeichenkette ist länger. Darüber hinaus ist die Beschreibung von IMO cppreference.com einfacher und beschreibt sie am besten meine eigene Erfahrung. negativer Wert, wenn * vor der von den Argumenten angegebenen Zeichenfolge in lexikografischer Reihenfolge Null, wenn beide Zeichenfolgen äquivalente positiver Wert, wenn * nach der von den Argumenten angegebenen Zeichenfolge in lexikografischer Reihenfolge
compare()
gibt eine Ganzzahl zurück, die ein Maß für den Unterschied zwischen den beiden Zeichenfolgen ist.
<
gibt an, dass die beiden Zeichenfolgen als gleichwertig verglichen werden. ==
gibt einfach einen booleschen Wert zurück, der angibt, ob die Strings gleich sind oder nicht.
Wenn Sie die zusätzlichen Details nicht benötigen, können Sie auch einfach compare
verwenden.
Dieser Code wird als Ergebnis -1 ergeben. Dies liegt daran, dass das erste nicht übereinstimmende Zeichen der verglichenen Zeichenfolge "h" niedriger ist oder nach "c" in alphabetischer Reihenfolge erscheint, obwohl die verglichene Zeichenfolge "human" länger ist als "cat".
Ich finde, dass der in cplusplus.com beschriebene Rückgabewert genauer ist, was -: 0: Sie vergleichen gleich & lt; 0: Entweder ist der Wert des ersten Zeichens, das nicht übereinstimmt, in der verglichenen Zeichenkette niedriger oder alle verglichenen Zeichen stimmen überein, aber die verglichene Zeichenkette ist kürzer. mehr als 0: Entweder ist der Wert des ersten Zeichens, das nicht übereinstimmt, in der verglichenen Zeichenkette größer oder alle verglichenen Zeichen stimmen überein, aber die verglichene Zeichenkette ist länger. Darüber hinaus ist die Beschreibung von IMO cppreference.com einfacher und beschreibt sie am besten meine eigene Erfahrung. negativer Wert, wenn * vor der von den Argumenten angegebenen Zeichenfolge in lexikografischer Reihenfolge Null, wenn beide Zeichenfolgen äquivalente positiver Wert, wenn * nach der von den Argumenten angegebenen Zeichenfolge in lexikografischer Reihenfolge
Ich habe eine Frage:
Nehmen wir an, es gibt zwei <
s, und ich möchte sie vergleichen. Es gibt die Möglichkeit, die Funktion %code% der Klasse %code% zu verwenden, aber ich habe auch festgestellt, dass das mit einfachen %code% Operatoren möglich ist (Beide Fälle sind möglich, auch wenn ich die %code% -Bibliothek nicht einschließe).
Kann jemand erklären, warum die Funktion %code% existiert, wenn ein Vergleich mit einfachen Operatoren möglich ist?
Ich verwende Code :: Blocks 13.12 Hier ist ein Beispiel für meinen Code:
%Vor%Tags und Links string c++ comparison
Mit den folgenden Codezeilen kann ich eine Datei in der Antwort eines Ajax-Anrufs in Firefox, Chrome, Opera herunterladen. Im IE wird das %code% -Attribut %code% nicht unterstützt. Daher funktioniert das unten in IE nicht.
HTML:
%Vor%JavaScript:
%Vor%Welche Optionen hätte ich, um das gleiche Verhalten im IE zu erreichen?
Es gibt einen hässlichen Hack, den Sie jedoch verwenden können.
Erstellen Sie eine unsichtbare %code% :
%Vor%Schreiben Sie Ihre Daten in die %code% : iframe:
%Vor%Verwenden Sie execCommand , um die Datei zu speichern (eigentlich , um den Dialog Speichern unter aufzurufen):
%Vor%Beachten Sie, dass %code% in IE11 nicht funktioniert. Ich weiß, dass es nahezu unmöglich ist, den Browser einwandfrei zu erkennen. Sie können dies jedoch als Sicherungsroutine versuchen, wenn das Speichern der Datei in Ihrem Code fehlschlägt.
Ich denke, das hängt damit zusammen, dass %code% nicht von allen Browsern speziell für %code% -Anker unterstützt wird, also können Sie stattdessen folgenden Code versuchen,
%Vor% IE unterstützt weder das Navigieren zu einem Daten-URI noch das Attribut %code% .
Sie können %code% verwenden, um die Datei für IE 10+ zu speichern.
Sie können %code% überprüfen und IE-spezifischen Code schreiben, andernfalls den vorhandenen Code verwenden, um die Datei zu speichern.
Sie können folgenden Link für weitere Details überprüfen:
Dateien lokal speichern mit Blob und msSaveBlob
Kann ich Punkte verwenden, dass das Download-Attribut in Chrome und Firefox unterstützt wird?
Befehl Speichern als mit execCommand kann den Trick machen, indem der Inhalt des Elements herunterladbar gemacht wird. p>
Mit msSaveBlob können Sie Blob oder Datei speichern durch Senden dieser Header:
%Vor%Überprüfen Sie Dateien lokal mit Blob und msSaveBlob speichern
Wenn Sie all das nicht selbst implementieren möchten, können Sie FileSaver.js mit einer netten Bibliothek speichern generierte Dateien auf Client-Seite. Es unterstützt Firefox, Chrome, Chrome für Android, IE 10+, Opera und Safari. Für IE & lt; 10 gibt es eine Verzweigung der Bibliothek, die saveTextAs hinzufügt, um Textdateien zu speichern (.htm, .html , .txt)
Ein serverseitiges Skript, das Dateinamen, Daten, Meme-Typ erhält und dann die Datei mit dem Header %code%
sendet