Strings vergleichen, C ++

8

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%     
Medvednic 25.07.2014, 14:22
quelle

3 Antworten

18

.compare() gibt eine Ganzzahl zurück, die ein Maß für den Unterschied zwischen den beiden Zeichenfolgen ist.

  • Ein Rückgabewert von 0 gibt an, dass die beiden Zeichenfolgen als gleichwertig verglichen werden.
  • Ein positiver Wert bedeutet, dass die verglichene Zeichenfolge länger ist oder das erste nicht übereinstimmende Zeichen größer ist.
  • Ein negativer Wert bedeutet, dass die verglichene Zeichenfolge kürzer ist oder das erste nicht übereinstimmende Zeichen niedriger ist.

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.

    
Tom Fenech 25.07.2014, 14:25
quelle
3
%Vor%

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

steht      

Null, wenn beide Zeichenfolgen äquivalente

vergleichen      

positiver Wert, wenn * nach der von den Argumenten angegebenen Zeichenfolge in lexikografischer Reihenfolge

erscheint
    
Idz 11.12.2016 15:48
quelle
1
___ qstnhdr ___ Strings vergleichen, C ++ ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123string ___ Eine Zeichenfolge ist eine endliche Abfolge von Symbolen, die üblicherweise für Text verwendet wird, manchmal jedoch auch für beliebige Daten. ___ tag123comparison ___ Fragen zum Datenvergleich und effiziente Möglichkeiten, dies zu erreichen. Bitte vermeiden Sie die Verwendung dieses Tags für den generischen (Meta) Vergleich von zwei Problemen oder Konzepten. ___ answer24958019 ___

compare() gibt eine Ganzzahl zurück, die ein Maß für den Unterschied zwischen den beiden Zeichenfolgen ist.

  • Ein Rückgabewert von < gibt an, dass die beiden Zeichenfolgen als gleichwertig verglichen werden.
  • Ein positiver Wert bedeutet, dass die verglichene Zeichenfolge länger ist oder das erste nicht übereinstimmende Zeichen größer ist.
  • Ein negativer Wert bedeutet, dass die verglichene Zeichenfolge kürzer ist oder das erste nicht übereinstimmende Zeichen niedriger ist.

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

    
___ answer41087984 ___
%Vor%

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

steht      

Null, wenn beide Zeichenfolgen äquivalente

vergleichen      

positiver Wert, wenn * nach der von den Argumenten angegebenen Zeichenfolge in lexikografischer Reihenfolge

erscheint
    
___ qstntxt ___

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%     
___
Cheers and hth. - Alf 25.07.2014 14:28
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

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?

    
___ answer25179390 ___

IE unterstützt %code% tag .

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.

    
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ answer25280856 ___

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%     
___ answer35014876 ___

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

    
___ tag123jquery ___ jQuery ist eine beliebte Cross-Browser-JavaScript-Bibliothek, die das DOM-Traversal (Document Object Model), die Ereignisbehandlung, Animationen und AJAX-Interaktionen erleichtert, indem die Diskrepanzen zwischen Browsern minimiert werden. Eine mit jQuery gekennzeichnete Frage sollte mit jQuery in Zusammenhang stehen, daher sollte jquery von dem fraglichen Code verwendet werden, und mindestens eine jquery-nutzungsbezogene Elemente müssen in der Frage enthalten sein. ___ tag123internetexplorer ___ Internet Explorer (üblicherweise abgekürzt IE oder MSIE) ist ein von Microsoft entwickelter Webbrowser, der Teil von Microsoft Windows ist. ___ tag123html ___ HTML (Hyper Text Markup Language) ist die Standard-Auszeichnungssprache, die zum Strukturieren von Webseiten und zum Formatieren von Inhalt verwendet wird. HTML beschreibt die Struktur einer Website semantisch zusammen mit Hinweisen für die Präsentation, wodurch sie eine Markup-Sprache statt einer Programmiersprache wird. Die neueste Revision der HTML-Spezifikation ist HTML5.2. ___ answer25253060 ___

Kann ich Punkte verwenden, dass das Download-Attribut in Chrome und Firefox unterstützt wird?

IE & lt; 10:

Befehl Speichern als mit execCommand kann den Trick machen, indem der Inhalt des Elements herunterladbar gemacht wird. p>

Nachteile:

  • Probleme in einigen Versionen von IE unter Win7 [Ich weiß nicht, ob es hier] repariert wurde
  • Benötigen Sie ein DOM-Element, das Daten enthält

IE & gt; = 10

Mit msSaveBlob können Sie Blob oder Datei speichern durch Senden dieser Header:

%Vor%

Überprüfen Sie Dateien lokal mit Blob und msSaveBlob speichern

Nachteile:

  • Brauchen Sie einen Blob zu definieren

Andere Browser

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)

Browserübergreifende Lösung

Ein serverseitiges Skript, das Dateinamen, Daten, Meme-Typ erhält und dann die Datei mit dem Header %code%

sendet     
___