Convertir una cadena a minúsculas en C

Jinku Hu 12 octubre 2023
  1. Utilizar la función tolower para convertir una cadena en minúsculas en C
  2. Usar la función personalizada para convertir una cadena a minúsculas en C
Convertir una cadena a minúsculas en C

Este artículo demostrará múltiples métodos sobre cómo convertir una cadena a minúsculas en C.

Utilizar la función tolower para convertir una cadena en minúsculas en C

La función tolower es parte de la biblioteca estándar de C definida en el archivo de cabecera <ctype.h>. La función tolower toma un argumento de tipo int y devuelve el valor convertido del carácter dado si existe la correspondiente representación en minúsculas. Tenga en cuenta que el carácter pasado debe ser representable de tipo EOF o unsigned char. En este caso, inicializamos el puntero char con un valor literal de cadena y luego iteramos sobre cada carácter para convertirlo a valores en minúsculas. Ten en cuenta que los argumentos de tipo char que pases a la función tolower deben ser convertidos a unsigned char.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  for (size_t i = 0; i < strlen(str); ++i) {
    printf("%c", tolower((unsigned char)str[i]));
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Producción :

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

El código de ejemplo anterior sobrescribe el contenido de la cadena original con los caracteres convertidos en minúsculas. Alternativamente, podemos asignar otro puntero char usando calloc, que es similar a malloc excepto que pone a cero la memoria asignada y almacena la cadena convertida por separado. Tenga en cuenta que el puntero debe ser liberado antes de que el programa salga, o si el proceso es de larga duración, debe ser liberado tan pronto como la variable de la cadena no se necesite.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);

  size_t len = strlen(str);
  char *lower = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    lower[i] = tolower((unsigned char)str[i]);
  }
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

Producción :

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

Usar la función personalizada para convertir una cadena a minúsculas en C

Una solución más flexible sería implementar una función personalizada que tome la variable cadena como argumento y devuelva la cadena convertida a minúsculas en una ubicación de memoria separada. Este método es esencialmente el desacoplamiento del ejemplo anterior de la función main. En este caso, creamos una función toLower que toma char*, donde se almacena una cadena terminada en cero y un entero de tipo size_t que denota la longitud de la cadena. La función asigna la memoria en el heap utilizando la función calloc; por lo tanto, el llamante es responsable de la reasignación de la memoria antes de que el programa salga.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *toLower(char *str, size_t len) {
  char *str_l = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    str_l[i] = tolower((unsigned char)str[i]);
  }
  return str_l;
}

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  size_t len = strlen(str);

  char *lower = toLower(str, len);
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

Producción :

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary
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