Comment pourrait on convertir une chaîne en majuscules. Les exemples que j’ai trouvé de googler ont à traiter avec des caractères.
Réponses
Trop de publicités?struct convert {
void operator()(char& c) { c = toupper((unsigned char)c); }
};
// ...
string uc_str;
for_each(uc_str.begin(), uc_str.end(), convert());
Remarque: Un couple de problèmes avec le dessus de la solution:
21.5 Null séquence utilitaires
Le contenu de ces en-têtes doit être la même que la Bibliothèque Standard C-têtes , , , , et [...]
Ce qui signifie que l'
cctype
membres peuvent bien être les macros ne convient pas à la consommation directe dans des algorithmes standard.Un autre problème avec le même exemple, c'est qu'il ne jette l'argument ou de vérifier que c'est non-négatif, ce qui est particulièrement dangereux pour les systèmes où la plaine
char
est signé. (La raison d'être: si c'est implémenté sous la forme d'une macro, il ne sera probablement utiliser une table de recherche et votre argument index dans cette table. Un indice négatif, vous donnera l'AC.)
Avez-vous de l'ASCII ou des caractères Internationaux dans les chaînes?
Si c'est le cas de cette dernière, "uppercasing" n'est pas aussi simple que cela, et il dépend de l'alphabet utilisé. Il y a bicaméral et monocaméral alphabets. Seulement bicaméral alphabets ont des caractères différents pour les majuscules et les minuscules. Aussi, il y a des composites personnages, comme le Latin capital letter 'DZ' (\u01F1 "DZ"), qui utilisent le soi-disant cas de titre. Cela signifie que seul le premier caractère (D) est changé.
Je vous suggère de regarder en soins intensifs, et la différence entre le Simple et Complète de Cas de Mappings. Cela peut vous aider: