La funzione strlen in C è una funzione che serve a calcolare la lunghezza di una stringa, escluso il carattere terminatore.
Per utilizzare la funzione strlen occorre includere la libreria string.h con la direttiva #define <string.h>.
Vediamo subito degli esempi di utilizzo di questa funzione.
Esempio 1 – confrontare la lunghezza di due stringhe con l’uso della funzione strlen in C
Ecco un semplicissimo esempio di un programma che confronta la lunghezza di due stringhe. Se le due lunghezze sono uguali mi restituirà il messaggio le stringhe hanno uguale lunghezza; altrimenti mi dirà se è più lunga la stringa 1 o la stringa 2.
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
char frase[MAX], frase2[MAX];
int len1,len2;
printf("Inserisci la prima frase: \n");
gets(frase);
printf("Inserisci la seconda frase: \n");
gets(frase2);
len1=strlen(frase);
len2=strlen(frase2);
if(len1==len2)
printf("le frasi sono di uguale lunghezza");
else if(len1>len2)
printf("la prima frase e' più lunga della seconda");
else
printf("la seconda frase e' più lunga della prima");
}
Esempio 2 – contiamo quante vocali, consonanti e spazi vuoti sono presenti in una stringa con la funzione strlen in C
Nell’articolo precedente abbiamo visto già come contare le vocali, le consonanti e gli spazi vuoti, ma non abbiamo utilizzato strlen. Ripropongo lo stesso esempio, semplicemente utilizzando tale funzione.
#include <stdio.h>
#include <string.h>
#define MAX 100
void main(){
char frase[MAX];
int len,i=0;
int conta=0,conta_vocali=0,conta_cons=0;
printf("Inserisci una frase: \n");
gets(frase);
len=strlen(frase);
while(i<len) {
if ((frase[i]=='a') || (frase[i]=='e') || (frase[i]=='i') || (frase[i]=='o') || (frase[i]=='u') || (frase[i]=='A') || (frase[i]=='E') || (frase[i]=='I') || (frase[i]=='O') || (frase[i]=='U'))
conta_vocali++;
else if (frase[i]==' ') conta++;
else conta_cons++;
i++;
}
printf("Le vocali sono : %d",conta_vocali);
printf("\nle consonanti sono: %d",conta_cons);
printf("\nGli spazi vuoti sono : %d",conta);
}
Esempio 3 – trasformare il carattere di ogni parola di una frase in maiuscolo e tutto il resto in minuscolo con l’uso della funzione strlen in C
Facciamo un esempio. Per ipotesi inserisco da tastiera CODing creativo, il programma trasformerà la frase in Coding Creativo.
Per farlo utilizzo questa volta delle comode funzioni della libreria ctype.h, per mostrarvi delle alternative ai precedenti procedimenti. In particolare utilizzeremo:
toupper() – ad esempio toupper (frase), converte la frase in maiuscolo
tolower() – ad esempio tolower (frase), converte la frase in minuscolo
isspace() – ad esempio isspace(c), controlla se c è un carattere vuoto.
Ecco dunque l’esempio utilizzando strlen in C:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 100
int main(){
char frase[MAX], frase2[MAX];
int len,i,spazi;
printf("Inserisci una frase: \n");
gets(frase);
len=strlen(frase);
for (i=0;i<len;i++) {
if ((i==0) || isspace(frase[i-1]))
frase2[i] = toupper(frase[i]);
else
frase2[i] = tolower(frase[i]);
}
puts(frase2);
}
Esempio 4 – Data in input una frase, si manda a capo ciascuna parola con l’uso della funzione strlen in C
In questo semplicissimo esempio, ogni volta che si incontra uno spazio vuoto si manda la parola che segue a capo.
if (c[i]==’ ‘) printf(“\n”);
#include <stdio.h>
#include <string.h>
#define MAX 50
int main()
{
int len,i;
char c[MAX];
printf("Inserisci il nome e cognome: ");
gets(c);
len=strlen(c);
for (i=0;i<len;i++) {
if (c[i]==' ') printf("\n");
else printf("%c", c[i]);
}
return 0;
}
Esempio 5 – parola palindroma
Ecco un esempio, inerente le stringhe, che viene riproposto frequentemente a scuola che in questo paragrafo svilupperemo utilizzando la funzione strlen in C.
Inserire in input una stringa e verificare se è palindroma.
Ricordiamo la definizione:
Il palindromo è una sequenza di caratteri che, letta al contrario, rimane invariata. Quindi una parola palindroma se letta da sinistra verso destra o da destra verso sinistra rimane invariata.
Alcuni esempi di parole palindrome sono: Anna, ingegni, inni, ebbe, ottetto, radar, pop, ecc…
Dunque, dapprima leggeremo la nostra stringa con gets(frase); dopo, con un ciclo for che utilizza due indici i e j, controlliamo a mano a mano che la prima lettera sia uguale all’ultima, la seconda alla penultima e così via. Se trova che i caratteri sono diversi allora setta la variabile palindroma, che era stata precedentemente inizializzata a zero, ad 1 ed esce dal ciclo.
Infine si controlla il valore della variabile palindroma, se è rimasta a zero vuol dire che la stringa è palindroma, altrimenti non lo è.
#include <stdio.h>
#include <string.h>
#define MAX 30
int main(){
char frase[MAX];
int len,i,j,palindroma=0;
printf("Inserisci una parola: \n");
gets(frase);
len=strlen(frase);
for(i=0, j=len-1; i<len/2; i++, j--){
if(frase[i]!=frase[j]){
palindroma=1;
break;
}
}
if (palindroma==0) printf("La stringa e' palindroma");
else printf("La stringa non e' palindroma");
}
Attenzione, se ad esempio, inseriamo Anna con la prima lettera maiuscola, il programma mi dirà che non è palindroma.
Quindi occorre inserire un controllo e trasformare tutti i caratteri in maiuscolo o minuscolo.
Questi sono dei semplici esempi di utilizzo della funzione strlen in C, da qui possono nascere tante esercitazioni.
Alcuni link utili
Funzioni getchar() e putchar in C
Ricerca di un elemento in una matrice
Array o vettori in linguaggio C
Media dei numeri in un array in linguaggio C