Converti stringa in minuscolo in C

Lasha Khintibidze 30 marzo 2021
  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 <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.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 <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.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 <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.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

Articolo correlato - C String