Converti stringa in minuscolo in C

Jinku Hu 12 ottobre 2023
  1. Usa la funzione tolower per convertire una stringa in minuscolo in C
  2. Usa la funzione personalizzata per convertire la stringa in minuscolo in C
Converti stringa in minuscolo in C

Questo articolo illustrerà più metodi su come convertire una stringa in minuscolo in C.

Usa la funzione tolower per convertire una stringa in minuscolo in C

La funzione tolower fa parte della libreria standard C definita nel file di intestazione <ctype.h>. tolower accetta un argomento di tipo int e restituisce il valore convertito del carattere dato se esiste la corrispondente rappresentazione minuscola. Notare che il carattere passato deve essere rappresentabile di tipo EOF o unsigned char. In questo caso, inizializziamo il puntatore char con un valore letterale di stringa e quindi iteriamo su ogni carattere per convertirlo in valori minuscoli. Ricorda però che il passaggio di argomenti di tipo char alla funzione tolower deve essere lanciato a char senza segno.

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

Produzione:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

Il codice di esempio precedente sovrascrive il contenuto della stringa originale con i caratteri minuscoli convertiti. In alternativa, possiamo allocare un altro puntatore char usando calloc, che è simile a malloc tranne per il fatto che azzera la memoria allocata e memorizza separatamente la stringa convertita. Si noti che il puntatore dovrebbe essere liberato prima che il programma termini, o se il processo è a lunga esecuzione, dovrebbe essere liberato non appena la variabile stringa non è necessaria.

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

Produzione:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

Usa la funzione personalizzata per convertire la stringa in minuscolo in C

Una soluzione più flessibile sarebbe implementare una funzione personalizzata che prenda la variabile stringa come argomento e restituisca la stringa minuscola convertita in una posizione di memoria separata. Questo metodo è essenzialmente il disaccoppiamento dell’esempio precedente dalla funzione main. In questo caso, abbiamo creato una funzione toLower che accetta char*, dove viene memorizzata una stringa con terminazione null e un intero di tipo size_t che denota la lunghezza della stringa. La funzione alloca la memoria sull’heap utilizzando la funzione calloc; quindi il chiamante è responsabile della deallocazione della memoria prima che il programma esca.

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

Produzione:

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

Articolo correlato - C String