Chaîne Inférieure/Supérieure en C++
Quelle est la meilleure façon, les gens ont trouvé pour faire une Chaîne en minuscules /majuscules en C++?
La question est compliquée par le fait que le C++ n'est pas un anglais seulement un langage de programmation. Est-il un bon multilingue méthode?
- Être conscient que la solution actuelle n'est pas compatible Unicode.
Vous devez vous connecter pour publier un commentaire.
http://notfaq.wordpress.com/2007/08/04/cc-convert-string-to-upperlower-case/
Aussi, CodeProject article pour la commune de chaîne méthodes: http://www.codeproject.com/KB/stl/STL_string_util.aspx
Cela va fonctionner, mais cela utiliser la norme locale "C". Vous pouvez utiliser les facettes si vous avez besoin pour obtenir un tolower pour un autre lieu. Le code ci-dessus à l'aide de facettes serait:
Pour copier-dérouleurs en espérant pouvoir utiliser Nic Forte réponse de la note de l'erreur d'orthographe dans "use_factet" et le manque troisième paramètre à std::transform:
devrait être
Vous devez également examiner cette question. Fondamentalement, le problème est que le standard C/C++ bibliothèques n'étaient pas conçus pour gérer les données Unicode, de sorte que vous aurez à regarder à d'autres bibliothèques.
Cela pourrait changer la norme C++ est mis à jour. Je sais que la prochaine compilateur de Borland (CodeGear) sera le support de l'Unicode, et je suppose que Microsoft C++ le compilateur va avoir, ou a déjà de la chaîne de bibliothèques qui prennent en charge le format Unicode.
Que Darren dit, la méthode la plus simple est d'utiliser std::transform.
Mais attention, dans certaines langues, comme l'allemand, par exemple, il n'y a pas toujours une correspondance entre les minuscules et en majuscules. Le "esset" caractère en minuscule (ressemble le caractère grec bêta) est transformé en "SS" en majuscules.
Si vous avez le coup de pouce, alors il a le moyen le plus simple. Jetez un oeil à to_upper()/to_lower() dans Boost chaîne d'algorithmes.
J'ai trouvé un moyen de convertir le cas de l'unicode (et multilingue) caractères, mais vous devez savoir/trouver (en quelque sorte) les paramètres régionaux du personnage:
Je n'ai pas trouvé un moyen de le faire encore... j'ai quelqu'un sait comment faire, faites le moi savoir.
La définition des paramètres régionaux à NULL ne fonctionne pas...
La
VCL
a unSysUtils.hpp
qui aLowerCase(unicodeStringVar)
etUpperCase(unicodeStringVar)
qui pourraient travailler pour vous. - Je l'utiliser dans C++ Builder 2009.Ce que Steve dit est juste, mais je suppose que si votre code a pour le support de plusieurs langues, vous pourriez avoir une méthode de fabrique, qui encapsule un ensemble de méthodes qui ne sont pertinentes toUpper ou toLower fondée sur la langue.