310 votes

Convertir une chaîne en C++ en majuscules

Comment pourrait on convertir une chaîne en majuscules. Les exemples que j’ai trouvé de googler ont à traiter avec des caractères.

560voto

Pierre Points 15256
#include <algorithm>
#include <string>

std::string str = "Hello World";
std::transform(str.begin(), str.end(),str.begin(), ::toupper);

218voto

Tony Edgecombe Points 2142

Poussée des algorithmes de chaîne :

119voto

Solution courte utilisant toupper() et C ++11.

30voto

dirkgently Points 56879
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.)

20voto

Milan Babuškov Points 20423

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:

http://userguide.icu-project.org/transforms/casemappings

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X