Funzione strlen() in C

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 carattare 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.

#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 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.

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 sinsitra 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 setta la variabile palindroma, che è stata inizializzata a zero, uguale a 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:

Funzione gets() e puts() in C

Funzioni getchar() e putchar in C

Uso della libreria string.h

Concatenare due stringhe in C

Array di caratteri in C

Ricerca di un elemento in una matrice

Prodotto tra matrici in C

Somma tra due matrici in C

Array multidimensionali

Tavola pitagorica in C

Array o vettori in linguaggio C

Media dei numeri in un array in linguaggio C


Autore dell'articolo: Cristina

Avatar per Coding Creativo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *