Mettez simplement, si l'entrée est toujours dans le même cas (ici, minuscule), et si les caractères sont toujours ascii, peuvent-on utiliser une chaîne :: Comparez pour déterminer de manière fiable l'ordre alphabétique de deux chaînes? P >
Ainsi, avec stringa.care (stressb) code> Si le résultat est égal à 0, ils sont identiques, si c'est négatif, Stringa vient avant Stressb alphabétiquement, et s'il est positif, Stressa vient après ? p>
5 Réponses :
Oui, tant que tous les caractères des deux cordes sont du même cas, et tant que les deux chaînes ne constituent que des lettres, cela fonctionnera.
Comparer code> est membre Fonction, cependant, alors vous l'appelleriez comme suit: P> stringA.compare(stringB);
Selon les docs sur Cplusplus.com, P>
La fonction membre renvoie 0 si tout les caractères dans le comparé Les contenus comparent égal, un négatif valeur si le premier personnage qui fait pas le match se compare à moins dans le objet que dans la chaîne de comparaison, et une valeur positive dans le contraire cas. p> blockQuote>
de sorte qu'il triera les chaînes dans l'ordre ASCII, qui sera alphabétique pour les chaînes anglaises (sans marques de diacritique ni autres caractères étendus) du même cas. P>
IIRC, apostrophes et traits d'union ne sont pas des marques dicritiques, non?
Droite, ils trieront dans l'ordre ASCII.
En règle générale, lors de l'alphabétisme, on ne considère pas les marques de ponctuation dans la détermination de la commande, de sorte que la ponctuation doit être retirée des cordes. Dans tous les cas, l'Apostrophe et l'union de traite sont inférieurs aux gammes alphabétiques en ASCII.
+1 pour mentionner le problème des marques diacritiques. String :: Comparer CODE> fonctionne uniquement pour l'ASCII inférieur (0-127).
Comme @jamesmcnellis l'a souligné, cela ne fonctionne que pour les chaînes du même cas.
Comme je l'ai dit dans la réponse "du même cas". Dans l'ordre ASCII: ASCII 'A'
Oui , P>
La fonction membre renvoie 0 si tout les caractères dans le comparé Les contenus comparent égal, un négatif valeur si le premier personnage qui fait pas le match se compare à moins dans le objet que dans la chaîne de comparaison, et une valeur positive dans le contraire cas. p>
pour les objets de chaîne, le résultat d'un La comparaison de caractères ne dépend que sur son code de caractère (c'est-à-dire <,
son ASCII code strong>), donc le résultat a une certaine limitée Commande alphabétique ou numérique Signification. P> blockQuote>
en C ++, pour String code> est l'instanciation de la classe de modèle basic_string code> avec les paramètres par défaut: basic_string basic_string code> utilisera le char_traits std :: chaîne code> La commande sera celle du code de caractères par défaut pour la mise en œuvre (compilateur) et qui est généralement l'ordre ASCII. Si vous avez besoin d'une commande différente (disons que vous voulez considérer {A, Á, à, Â Â Â} comme équivalent), vous pouvez instancier un basic_string code> avec votre propre char_traits <> code> la mise en oeuvre. Fourniture d'un indicateur Comparer le pointeur de fonction code>. p>
Avez-vous un exemple pour cela?
Les spécifications de la garantie linguistique C et C ++ pour la commande lexicale, 'A' <'B' <'C' ... <'Z'. La même chose est vraie pour les minuscules. P>
La commande de chiffres de texte est également garantie: '0' <... <9 '. p>
Lorsque vous travaillez avec plusieurs langues, de nombreuses personnes créent une gamme de caractères. Le tableau est recherché le personnage. Au lieu de comparer des caractères, les indices sont comparés. p>
La norme de langue C ++ fait pas i> Spécifiez un ensemble de caractères d'exécution et, en tant que telle, elle n'est pas garantie par la norme linguistique que les lettres seront dans une telle commande et elle dépend donc la mise en œuvre.