Cómo convertir una cadena de caracteres en mayúsculas en C++

Jinku Hu 11 diciembre 2023
  1. Usa std::transform() y std::toupper() para convertir una cadena en mayúsculas
  2. Usa icu::UnicodeString y toUpper() para convertir la cadena en mayúsculas
  3. Use icu::UnicodeString y toUpper() With Specific Locale para convertir la cadena en mayúsculas
Cómo convertir una cadena de caracteres en mayúsculas en C++

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;
}
Autor: 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

Artículo relacionado - C++ String