Comment convertir une chaîne de caractères en majuscules en C++

Jinku Hu 11 décembre 2023
  1. Utilisez std::transform() et std::toupper() pour convertir une chaîne de caractères en majuscules
  2. Utilisez icu::UnicodeString et toUpper() pour convertir la chaîne en majuscules
  3. Utilisez icu::UnicodeString et toUpper() avec une localisation spécifique pour convertir la chaîne en majuscules
Comment convertir une chaîne de caractères en majuscules en C++

Cet article explique plusieurs méthodes C++ pour convertir une string en majuscules.

Utilisez std::transform() et std::toupper() pour convertir une chaîne de caractères en majuscules

La méthode std::transform est issue de la bibliothèque STL <algorithm>, et elle peut appliquer la fonction donnée à une plage. Dans cet exemple, nous l’utilisons pour opérer sur une plage de caractères std::string et convertir chaque char en lettres majuscules en utilisant la fonction toupper. Notez que, même si cette méthode réussit à transformer les caractères d’un seul octet de la chaîne donnée, les caractères avec un encodage sur plusieurs octets ne sont pas mis en majuscules, comme on peut le voir dans la sortie du programme.

#include <iostream>
#include <algorithm>
#include <string>

using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;

string capitalizeString(string s)
{
    transform(s.begin(), s.end(), s.begin(),
                   [](unsigned char c){ return toupper(c); });
    return s;
}

int main() {
    string string1("hello there είναι απλά ένα κείμενο χωρίς");
    cout << "input  string: " << string1 << endl
         <<  "output string: " << capitalizeString(string1) << endl << endl;

    return 0;
}

Production:

input  string: hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE είναι απλά ένα κείμενο χωρίς

Utilisez icu::UnicodeString et toUpper() pour convertir la chaîne en majuscules

Le code ci-dessus fonctionne bien pour les chaînes ASCII et certains autres caractères, mais si vous passez par exemple certaines séquences de chaînes Unicode, la fonction toupper ne les mettra pas en majuscules. La solution portable consiste donc à utiliser les routines de la bibliothèque ICU (International Components for Unicode), qui est suffisamment mature pour offrir une certaine stabilité, est largement accessible et permet de conserver un code multiplateforme.

Pour utiliser la bibliothèque ICU, vous devez inclure les en-têtes suivants <unicode/unistr.h>, <unicode/ustream.h> et <unicode/locid.h> dans votre fichier source. Il y a de fortes chances que ces bibliothèques soient déjà installées et disponibles sur votre système d’exploitation, et les exemples de code devraient fonctionner parfaitement. Mais si vous obtenez des erreurs à la compilation, consultez les instructions sur le site de l’ICU website sur la façon de télécharger les bibliothèques pour des plates-formes spécifiques.

Notez que vous devez fournir les indicateurs de compilation suivants pour réussir à établir un lien avec les dépendances des bibliothèques de l’ICU:

g++ sample_code.cpp -licuio -licuuc -o sample_code
#include <iostream>
#include <string>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <unicode/locid.h>

using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;

int main() {
    string string1("hello there είναι απλά ένα κείμενο χωρίς");

    icu::UnicodeString unicodeString(string1.c_str());
    cout << "input string:  " << string1 << endl
        <<  "output string: " << unicodeString.toUpper() << endl;

    return 0;
}

Production:

input string:  hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE ΕΊΝΑΙ ΑΠΛΆ ΈΝΑ ΚΕΊΜΕΝΟ ΧΩΡΊΣ

Utilisez icu::UnicodeString et toUpper() avec une localisation spécifique pour convertir la chaîne en majuscules

La fonction toUpper peut également accepter un paramètre locale pour opérer sur la chaîne avec les conventions d’une locale spécifique. L’argument à passer peut être construit séparément comme objet icu::Locale ou vous pouvez simplement spécifier la locale dans la chaîne de caractères littérale à la fonction toUpper, comme démontré dans l’exemple de code suivant:

#include <unicode/locid.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>

#include <iostream>

int main() {
  string string2 = "Contrairement à une opinion répandue";

  icu::UnicodeString unicodeString2(string2.c_str());
  cout << unicodeString2.toUpper("fr-FR") << endl;

  return 0;
}
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ String