Poner en mayúscula la primera letra de una cadena en C++

Neha Imran 12 octubre 2023
Poner en mayúscula la primera letra de una cadena en C++

Este artículo analizará varios enfoques para convertir el primer alfabeto de una cadena a mayúsculas.

Poner en mayúscula la primera letra de una cadena en C++

Abordaremos este problema en tres casos diferentes:

  1. La cadena comienza con un alfabeto.
  2. La cadena comienza con un carácter especial o un número.
  3. La cadena contiene un carácter de inicio de varios bytes, y necesitamos poner en mayúscula cada palabra.

La cadena contiene el alfabeto como primer carácter

Las soluciones a este caso son sencillas. Podemos usar la función de biblioteca integrada toupper() o podemos usar nuestra implementación definida por el usuario.

Tenemos un método llamado toupper() en C++. Este método convierte un alfabeto en minúsculas en mayúsculas.

El objetivo se puede lograr simplemente llamando a esta función en el índice inicial de la cadena.

Código de ejemplo:

#include <iostream>
#include <string>
using namespace std;

int main() {
  string str = "sudo";
  str[0] = toupper(str[0]);
  cout << str;
}

Producción :

Sudo

Siempre es aconsejable estar familiarizado con la lógica detrás de los métodos incorporados. Busquemos una solución sin usar la incorporada.

Los caracteres en minúscula de la a a la z tienen un valor ASCII entre 97 y 122, y los caracteres en mayúscula de la A a la Z tienen un valor ASCII entre 65 y 92. Deducimos 32 del valor ASCII del carácter de entrada para la conversión de minúsculas a mayúsculas.

Siempre es bueno verificar si el primer carácter ya es una letra mayúscula. De lo contrario, es posible que tengamos que enfrentarnos a una salida extraña.

Código de ejemplo:

#include <iostream>
#include <string>
using namespace std;

int main() {
  string ML_Model = "artificial neural networks";
  if (ML_Model[0] >= 97 && ML_Model[0] <= 122) {  // if it is a lowercase char
    ML_Model[0] = ML_Model[0] - 32;
  }
  cout << ML_Model;
}

Producción :

Artificial neural networks

La primera letra de String es un carácter especial

Ahora discutiremos un caso en el que puede haber algunos caracteres especiales o números al comienzo de la cadena. En ese caso, restarle 32 a la primera letra puede generar un símbolo extraño.

Para manejar este tipo de cadenas, primero usaremos el método isalpha para determinar si es un alfabeto o no. Y después de este método, usaremos la función toupper en un personaje.

Código de ejemplo:

#include <iostream>
using namespace std;

void upperCaseAlphabet(string &str) {
  for (int i = 0; i <= str.length(); i++) {
    if (isalpha(str[i])) {
      str[i] = toupper(str[i]);
      break;
    }
  }
}

int main() {
  string str = "#1delftstack";
  upperCaseAlphabet(str);
  cout << str;
}

Producción :

#1Delftstack

Cadena con varias palabras que contienen caracteres iniciales de varios bytes

En ejemplos anteriores, estábamos tratando con cadenas que contenían solo una palabra. Ahora trabajemos con cadenas más largas que contengan más palabras y caracteres especiales y pongamos en mayúscula cada palabra de la cadena.

Usaremos los métodos toupper(), isalpha() e isspace() para lograr el objetivo.

  1. toupper() - convierte un carácter alfabético a mayúsculas.
  2. isalpha() - comprueba si el carácter es un alfabeto.
  3. isspace() - comprueba si el carácter es un espacio.

Código de ejemplo:

#include <iostream>
#include <string>
using namespace std;

void upperCaseAlphabet(string &str) {
  bool flag = true;
  for (int i = 0; i <= str.length(); i++) {
    if (isalpha(str[i]) && flag == true) {
      str[i] = toupper(str[i]);
      flag = false;
    } else if (isspace(str[i])) {
      flag = true;
    }
  }
}

int main() {
  string str = "i $love #\Traveling";
  upperCaseAlphabet(str);
  cout << str;
}

Producción :

I $Love #\Traveling

Artículo relacionado - C++ String