Funzione strcmp e strncmp per confrontare due stringhe in C

La funzione strcmp del linguaggio C è una funzione in grado di confrontare tra di loro due stringhe, comparando ogni loro elemento. In particolare, una volta effettuato il confronto, la funzione restituirà uno dei tre possibili valori interi:

  • il numero 0 (= 0) nel caso in cui le due stringhe inserite risultano essere identiche.

  • un valore minore di zero (< 0), se la prima stringa (str1) risulta essere minore della seconda stringa (str2).

  • un valore maggiore di zero (> 0), se la seconda stringa (str2) è minore della prima stringa (str1).

Di seguito viene riportata la sintassi della funzione strcmp:

int strcmp(const char str1, const char str2);

dove str1 e str2 sono le due stringhe da confrontare.

Come accennato, la funzione strcmp confronta le due stringhe verificando ogni elemento in esse contenute. Questo comportamento potrebbe però non essere ideale in alcune situazioni in cui, per esempio, basta verificare i primi elementi delle stringhe. Per questo motivo nel linguaggio C esiste anche la funzione strncmp che permette di confrontare al massimo i primi n caratteri della stringa str1 con la stringa str2. 

Di fatto la sintassi della funzione strncmp risulta essere identica alla funzione strcmp, con semplicemente l’aggiunta di un parametro per indicare il numero di caratteri da confrontare:

int strncmp(const char str1, const char str2, size_t n);

Nota: entrambe le funzioni sono implementate all'interno della libreria string.h, di conseguenza per poter usare la strcmp o la strncmp bisogna includere all'interno del proprio programma la libreria usando la direttiva #include <string.h>.

Esempio di utilizzo della funzione strcmp in C

Nel seguente esempio viene usata la funzione strcmp per confrontare due stringhe precedentemente inizializzate.

#include <stdio.h> #include <string.h> int main(){     char str1[] = "CIAO mondo";     char str2[] = "CIAO MONDO";     int r;     r = strcmp(str1, str2);     if(r == 0){         printf("Le due stringhe sono identiche!\n");     } else if(r < 0){         printf("La prima stringa è minore della seconda stringa.\n");     } else {         printf("La seconda stringa è minore della prima stringa.\n");     }     return 0; } // Output: La seconda stringa è minore della prima stringa.

In questo caso la funzione strcmp restituirà un numero maggiore di 0 in quanto i caratteri di str1 sono più grandi di quelli di str2. Questo risultato potrebbe risultare controintuitivo, ma i caratteri che compongono le due stringhe, anche se uguali, sono scritti in maniera diversa, infatti str2 contiene solamente caratteri in maiuscolo, mentre str1 contiene sia caratteri minuscoli che caratteri maiuscoli. A questo punto se andiamo a vedere la tabella ASCII le lettere minuscole sono associate a valori più grandi delle lettere maiuscole ('A' < 'Z' < 'a' < 'z'), di conseguenza str1 contiene elementi più grandi di str2.

Esempio di utilizzo della funzione strncmp in C

Nel seguente esempio viene ripreso il codice dell’esempio precedente, con l’unica differenza che viene usata la funzione strncmp per confrontare solamente i primi 4 elementi delle due stringhe.

#include <stdio.h> #include <string.h> int main(){     char str1[] = "CIAO mondo";     char str2[] = "CIAO MONDO";     int r;     r = strncmp(str1, str2, 4);     if(r == 0){         printf("Le due stringhe sono identiche!\n");     } else if(r < 0){         printf("La prima stringa è minore della seconda stringa.\n");     } else {         printf("La seconda stringa è minore della prima stringa.\n");     }     return 0; } // Output: Le due stringhe sono identiche!

In questo caso la funzione strncmp restituirà 0 in quanto i primi 4 caratteri delle due stringhe risultano essere uguali.