Converti stringa in maiuscolo in C++

Jinku Hu 11 dicembre 2023
  1. Usa std::transform() e std::toupper() per convertire la stringa in maiuscolo
  2. Usa icu::UnicodeString e toUpper() per convertire la stringa in maiuscolo
  3. Usa icu::UnicodeString e toUpper() con impostazioni locali specifiche per convertire la stringa in maiuscolo
Converti stringa in maiuscolo in C++

Questo articolo spiegherà diversi metodi C++ su come convertire una stringa in maiuscolo.

Usa std::transform() e std::toupper() per convertire la stringa in maiuscolo

Il metodo std::transform proviene dalla libreria STL <algorithm>e può applicare la funzione data a un intervallo. In questo esempio, lo utilizziamo per operare sull’intervallo di caratteri std::string e convertire ogni char in lettere maiuscole usando la funzione toupper. Si noti che, anche se questo metodo trasforma correttamente i caratteri a un byte dalla stringa data, i caratteri con codifica multibyte non vengono maiuscoli, come si vede nell’output del programma.

#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;
}

Produzione:

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

Usa icu::UnicodeString e toUpper() per convertire la stringa in maiuscolo

Il codice sopra funziona bene per le stringhe ASCII e alcuni altri caratteri, ma se passi ad es. alcune sequenze di stringhe Unicode, la funzione toupper non le renderà maiuscole. Quindi, la soluzione portatile consiste nell’usare le routine della libreria ICU (International Components for Unicode), che è abbastanza matura da offrire stabilità, è ampiamente accessibile e manterrà il codice multipiattaforma.

Per utilizzare la libreria ICU dovresti includere le seguenti intestazioni <unicode/unistr.h>, <unicode/ustream.h> e <unicode/locid.h> nel tuo file sorgente. Ci sono buone probabilità che queste librerie siano già installate e disponibili sul tuo sistema operativo e gli esempi di codice dovrebbero funzionare bene. Ma se si ottengono errori in fase di compilazione, fare riferimento alle istruzioni sull’ICU sito web su come scaricare le librerie per piattaforme specifiche.

Si noti che è necessario fornire i seguenti flag del compilatore per collegarsi correttamente alle dipendenze della libreria 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;
}

Produzione:

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

Usa icu::UnicodeString e toUpper() con impostazioni locali specifiche per convertire la stringa in maiuscolo

La funzione toUpper può anche accettare il parametro locale per operare sulla stringa con le convenzioni di una specifica locale. L’argomento da passare può essere costruito separatamente come oggetto icu::Locale oppure puoi semplicemente specificare locale in una stringa letterale alla funzione toUpper, come dimostrato nel prossimo esempio di codice:

#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;
}
Autore: 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

Articolo correlato - C++ String