Convertir une chaîne de caractères en minuscules en C

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction tolower pour convertir une chaîne de caractères en minuscules en C
  2. Utiliser la fonction personnalisée pour convertir la chaîne de caractères en minuscules en C
Convertir une chaîne de caractères en minuscules en C

Cet article présente plusieurs méthodes de conversion des chaînes de caractères en minuscules en C.

Utiliser la fonction tolower pour convertir une chaîne de caractères en minuscules en C

La fonction tolower fait partie de la bibliothèque standard C définie dans le fichier d’en-tête <ctype.h>. La fonction tolower prend un argument de type int et retourne la valeur convertie du caractère donné si la représentation minuscule correspondante existe. Notez que le caractère passé doit être soit EOF soit de type unsigned char représentable. Dans ce cas, nous initialisons le pointeur char avec une valeur littérale de chaîne de caractères, puis nous itérions sur chaque caractère pour le convertir en valeurs minuscules. Notez cependant que les arguments de type char passés à la fonction tolower doivent être transformés en 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);
}

Production :

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

L’exemple de code précédent écrase le contenu de la chaîne originale avec les caractères minuscules convertis. Alternativement, nous pouvons allouer un autre pointeur de char en utilisant calloc, qui est similaire à malloc sauf qu’il met à zéro la mémoire allouée et stocke la chaîne convertie séparément. Notez que le pointeur doit être libéré avant que le programme ne se termine, ou si le processus est long, il doit être libéré dès que la variable string n’est plus nécessaire.

#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);
}

Production :

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

Utiliser la fonction personnalisée pour convertir la chaîne de caractères en minuscules en C

Une solution plus souple consisterait à mettre en œuvre une fonction personnalisée qui prendrait la variable chaîne comme argument et renverrait la chaîne minuscule convertie à un emplacement mémoire distinct. Cette méthode est essentiellement le découplage de l’exemple précédent de la fonction main. Dans ce cas, nous avons créé une fonction toLower qui prend char*, où une chaîne à terminaison nulle est stockée et un entier de type size_t indiquant la longueur de la chaîne. La fonction alloue la mémoire sur le tas en utilisant la fonction calloc ; ainsi l’appelant est responsable de désallouer la mémoire avant que le programme ne se termine.

#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);
}

Production :

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

Article connexe - C String