La comparaison de chaînes, c++
J'ai une question:
Disons qu'il y a deux std::string
s et je veux les comparer, il y a la possibilité d'utiliser le compare()
fonction de la string
classe mais j'ai aussi remarqué qu'il est possible à l'aide de simples < > !=
opérateurs (les deux cas sont possibles même si je ne comprend pas le <string>
de la bibliothèque).
Quelqu'un peut m'expliquer pourquoi le compare()
fonction existe si une comparaison peut être faite à l'aide de simples opérateurs?
btw j'utilise Code::Blocks 13.12
voici un exemple de mon 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;
}
Il est parfois plus utile d'avoir un positif, nul ou négatif.
OriginalL'auteur Medvednic | 2014-07-25
Vous devez vous connecter pour publier un commentaire.
.compare()
renvoie un entier, qui est une mesure de la différence entre les deux chaînes.0
indique que les deux chaînes sont considérées comme égales.operator==
simplement renvoie un booléen indiquant si les chaînes sont égales ou non.Si vous n'avez pas besoin de détail supplémentaire, vous pouvez tout aussi bien utiliser
==
.OriginalL'auteur Tom Fenech
Ce code vous donnera -1 comme un résultat. Cela est dû à la première non-correspondance des caractères de la chaîne par rapport 'h' est inférieur ou apparaît après "c' dans l'ordre alphabétique, même si le rapport de la chaîne, "humaine" est plus que "chat".
- Je trouver la valeur de retour est décrit dans cplusplus.com est plus précis qui sont:
En outre, l'OMI cppreference.com'description est plus simple et donc loin décrivent le mieux à ma propre expérience.
OriginalL'auteur Idz
Concernant la question,
Par rapport à
<
et==
, lecompare
fonction est conceptuellement plus simple et, dans la pratique, il peut être plus efficace, car elle évite deux comparaisons par point pour l'ordinaire de la commande d'articles.Comme un exemple de simplicité, pour les petites valeurs de type entier, vous pouvez écrire une fonction de comparaison comme ceci:
qui est très efficace.
Maintenant pour une structure
En essayant d'exprimer ce lexicographique comparer directement en termes de
<
vous vous retrouvez avec d'horribles complexité et l'inefficacité, relativement parlant.Avec C++11, pour la simplicité seule ordinaire en moins que la base de comparaison lexicographique comparer peut être tout simplement mis en œuvre en termes de n-uplet de comparaison.
auto int f(int, int) -> int;
frémit. Pourquoi la fuite type de retour?personne n'est encore fait un cas d'utilisation de deux différents déclaration de fonction syntaxes. je pense que les "shuffers" de commentaires et de l'invalide déclaration signifie que vous de réagir émotionnellement à tout changement ici. mais je ne vois pas l'utilité à l'aide de deux syntaxes différentes, quand un seul suffit.
OriginalL'auteur Cheers and hth. - Alf