Converti stringa in minuscolo in C
-
Usa la funzione
tolower
per convertire una stringa in minuscolo in C - Usa la funzione personalizzata per convertire la 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
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