Cómo convertir una cadena de caracteres en mayúsculas en C++
-
Usa
std::transform()
ystd::toupper()
para convertir una cadena en mayúsculas -
Usa
icu::UnicodeString
ytoUpper()
para convertir la cadena en mayúsculas -
Use
icu::UnicodeString
ytoUpper()
With Specific Locale para convertir la cadena en mayúsculas
Este artículo explicará varios métodos de C++ de cómo convertir una cadena de caracteres en mayúsculas.
Usa std::transform()
y std::toupper()
para convertir una cadena en mayúsculas
El método std::transform
es de la biblioteca STL <algorithm>
, y puede aplicar la función dada a un rango. En este ejemplo, lo utilizamos para operar en el rango de caracteres std::string
y convertir cada char
a mayúsculas usando la función toupper
. Observe que, aunque este método transforma con éxito los caracteres de un solo byte de la cadena dada, los caracteres con codificación multibyte no se ponen en mayúsculas, como se ve en la salida del programa.
#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;
}
Resultado:
input string: hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE είναι απλά ένα κείμενο χωρίς
Usa icu::UnicodeString
y toUpper()
para convertir la cadena en mayúsculas
El código anterior funciona bien para las cadenas ASCII y algunos otros caracteres, pero si pasas por ejemplo ciertas secuencias de cadenas Unicode, la función toupper
no las pondrá en mayúsculas. Así que la solución portátil es usar rutinas de la biblioteca ICU
(International Components for Unicode), que es lo suficientemente madura para ofrecer estabilidad, es ampliamente accesible, y mantendrá tu código multiplataforma.
Para utilizar la biblioteca ICU
deberías incluir los siguientes encabezados <unicode/unistr.h>
, <unicode/ustream.h>
y <unicode/locid.h>
en tu archivo fuente. Es muy probable que estas librerías ya estén instaladas y disponibles en tu sistema operativo, y los ejemplos de código deberían funcionar bien. Pero si recibes errores en tiempo de compilación, consulta las instrucciones en la UCI sitio web sobre cómo descargar las bibliotecas para plataformas específicas.
Tenga en cuenta que debe proporcionar las siguientes marcas del compilador para enlazar con éxito con las dependencias de la biblioteca de la UCI:
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;
}
Resultado:
input string: hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE ΕΊΝΑΙ ΑΠΛΆ ΈΝΑ ΚΕΊΜΕΝΟ ΧΩΡΊΣ
Use icu::UnicodeString
y toUpper()
With Specific Locale para convertir la cadena en mayúsculas
La función toUpper
también puede aceptar el parámetro locale
para operar en la cadena con las convenciones de un locale
específico. El argumento a pasar puede ser construido por separado como objeto icu::Locale
o puedes especificar el locale en la cadena literalmente a la función toUpper
, como se demuestra en el siguiente ejemplo de código:
#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 FacebookArtículo relacionado - C++ String
- Encuentre el primer carácter repetido en una cadena en C++
- Encuentre la subcadena común más larga en C++
- Poner en mayúscula la primera letra de una cadena en C++
- Comparación de cadenas y caracteres en C++
- Eliminar el último carácter de una cadena en C++
- Obtener el último carácter de una cadena en C++