Converti stringa in maiuscolo in C++
-
Usa
std::transform()
estd::toupper()
per convertire la stringa in maiuscolo -
Usa
icu::UnicodeString
etoUpper()
per convertire la stringa in maiuscolo -
Usa
icu::UnicodeString
etoUpper()
con impostazioni locali specifiche per convertire la stringa in maiuscolo
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;
}
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