En utilisant le moins que l'opérateur de comparaison de chaînes de caractères
Je suis en suivant un tutoriel de C++ et de regarder les chaînes et les surcharges avec des opérateurs tels que +=, ==, != etc, ont actuellement une simple instruction si
if(s1 < s2)
cout << s2 <<endl;
else
if(s2 < s1)
cout << s1 << endl;
else
cout << "Equal\n";
mais, comment cela fonctionne, et comment le programme de décider quelle chaîne est supérieure à une autre?
en regardant autour, j'ai trouvé un modèle de base decleration:
template<class charT, class traits, class Allocator>
bool operator< ( const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs );
est-ce à définir comment < œuvres? si oui, que dire /faire?
aussi faire les opérateurs suivants ont pas de sens pour les chaînes? - = * =
tous les conseils sont grandement appréciés!
Depuis
std::string
est en fait un typedef
pour std::basic_string<char, std::char_traits<char>, std::allocator<char>>
, en particulier l'instanciation de ce modèle de fonction est bool std::operator<(const std::string&, const std::string&);
, qui est sans doute appelé par votre s1 < s2
et s2 < s1
expressions.OriginalL'auteur Dmist | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
Le moins que l'opérateur sur les chaînes ne une comparaison lexicographique sur les cordes. Cela se compare des chaînes de la même manière qu'ils devraient être énumérés dans l'ordre du dictionnaire, généralisée à travailler pour les chaînes de caractères avec des caractères non-lettre.
Par exemple:
Pour plus d'informations, regardez la
std::lexicographical_compare
algorithme, dont le moins que l'exploitant en général invoque.Comme pour
-=
et*=
, aucune de ces opérateurs sont définis sur les cordes. Le seul "arithmétique" les opérateurs sont définis+
et+=
, qui effectuent la concaténation de chaîne.Espérons que cette aide!
"A" < "a"
est un ASCII hypothèse et ne fonctionne pas pour d'autres jeux de caractères, comme EBCDIC. 🙂Il y a probablement un avertissement général: Lexicographiques de tri est généralement une mauvaise idée si elle est utilisée dans l'INTERFACE utilisateur. Les résultats sont non seulement dépend de l'encodage réel (et généralement à confusion), en gros, c'est complètement faux pour unicode.
Hey, merci beaucoup pour les réponses, savais qu'il y avait une explication simple!
Comparaisons de chaîne presque certainement ne pas invoquer
lexicographical_compare
, bien que l'algorithme utilisé peut être similaire.OriginalL'auteur
Les opérateurs de comparaison de mettre en œuvre lexicographique de la commande de chaînes.
-=
et*=
ne sont pas définies pour les chaînes.OriginalL'auteur