strcmp e confronto
Confrontare stringhe
strcmp e confronto è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.
Confrontare le stringhe
In C non è possibile confrontare le stringhe con ==. Questo confronta soltanto gli indirizzi di due array, non il loro contenuto.
Usate strcmp(a, b) di <string.h> per confrontarle carattere per carattere.
#include <stdio.h>
#include <string.h>
int main(void) {
char a[] = "apple";
char b[] = "apple";
if (strcmp(a, b) == 0)
printf("Strings are equal\n");
return 0;
}Cosa restituisce strcmp
strcmp restituisce un int:
- 0 se le stringhe sono uguali
- un valore negativo se il primo carattere diverso in
aè minore di quello inb - un valore positivo in caso contrario
#include <stdio.h>
#include <string.h>
int main(void) {
printf("%d\n", strcmp("abc", "abc"));
printf("%d\n", strcmp("abc", "abd"));
printf("%d\n", strcmp("abd", "abc"));
return 0;
}L'errore dell'uguaglianza rappresentata da zero
Un errore comune consiste nello scrivere if (strcmp(a, b)) aspettandosi che significhi «uguale».
Ricordate che strcmp restituisce 0 (falso) quando le stringhe sono uguali, quindi la condizione è vera quando differiscono. Confrontate sempre esplicitamente il risultato con 0.
#include <stdio.h>
#include <string.h>
int main(void) {
char input[] = "yes";
if (strcmp(input, "yes") == 0)
printf("Confirmed\n");
else
printf("Not confirmed\n");
return 0;
}Come funziona il confronto
strcmp confronta i valori ASCII (dei byte) dei caratteri uno alla volta, fino a quando trova una differenza o raggiunge un terminatore.
Le lettere maiuscole (A=65) vengono prima delle minuscole (a=97), quindi "Zebra" viene prima di "apple" nell'ordinamento.
#include <stdio.h>
#include <string.h>
int main(void) {
printf("%d\n", strcmp("Zebra", "apple"));
return 0;
}Ordinamento lessicografico
Il segno del risultato di strcmp consente di ordinare le stringhe alfabeticamente. Un risultato negativo significa che il primo argomento viene prima nell'ordine alfabetico.
#include <stdio.h>
#include <string.h>
int main(void) {
const char *x = "banana";
const char *y = "cherry";
if (strcmp(x, y) < 0)
printf("%s comes before %s\n", x, y);
return 0;
}strncmp: confronto limitato
strncmp(a, b, n) confronta al massimo n caratteri. È utile per verificare i prefissi.
Ad esempio, per verificare se una stringa inizia con "http".
#include <stdio.h>
#include <string.h>
int main(void) {
char url[] = "https://site.com";
if (strncmp(url, "https", 5) == 0)
printf("Secure URL\n");
return 0;
}Confronto senza distinzione tra maiuscole e minuscole
Il normale strcmp distingue tra maiuscole e minuscole. Per ignorare questa differenza, durante il confronto è possibile convertire i caratteri con tolower di <ctype.h>.
(I sistemi POSIX offrono anche strcasecmp, ma non fa parte dello standard C.)
#include <stdio.h>
#include <ctype.h>
int ci_cmp(const char *a, const char *b) {
while (*a && (tolower(*a) == tolower(*b))) { a++; b++; }
return tolower(*a) - tolower(*b);
}
int main(void) {
printf("%d\n", ci_cmp("Hello", "hello"));
return 0;
}Cercare con il confronto
È possibile scorrere un array di stringhe e usare strcmp per trovare una corrispondenza, come in una semplice tabella di ricerca.
#include <stdio.h>
#include <string.h>
int main(void) {
const char *fruits[] = {"apple", "banana", "cherry"};
const char *target = "banana";
for (int i = 0; i < 3; i++) {
if (strcmp(fruits[i], target) == 0) {
printf("Found at index %d\n", i);
}
}
return 0;
}Ordinare le stringhe
Usando strcmp come motore del confronto, è possibile ordinare gli array di stringhe. Ecco un piccolo bubble sort che scambia i puntatori in base all'ordine.
#include <stdio.h>
#include <string.h>
int main(void) {
const char *names[] = {"Carol", "Alice", "Bob"};
int n = 3;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - 1 - i; j++)
if (strcmp(names[j], names[j+1]) > 0) {
const char *t = names[j];
names[j] = names[j+1];
names[j+1] = t;
}
for (int i = 0; i < n; i++) printf("%s\n", names[i]);
return 0;
}Non confrontate direttamente con una sottrazione
Potreste provare a scrivere un confronto personalizzato con a[i] - b[i], ma con valori char grezzi il comportamento del segno dipende dall'implementazione e può verificarsi un overflow.
Preferite la libreria strcmp, che gestisce correttamente questi casi limite.
#include <stdio.h>
#include <string.h>
int main(void) {
int r = strcmp("file1", "file2");
printf("Result sign: %s\n", r < 0 ? "negative" : "non-negative");
return 0;
}Confrontare l'input dell'utente
Un utilizzo concreto consiste nel verificare una password o una scelta di menu. Leggete l'input, quindi confrontatelo con i valori attesi usando strcmp.
Confrontate sempre il risultato con 0 per verificare l'uguaglianza.
#include <stdio.h>
#include <string.h>
int main(void) {
char choice[] = "quit";
if (strcmp(choice, "quit") == 0)
printf("Exiting program\n");
return 0;
}Verifica rapida
Verificate la vostra comprensione dei valori restituiti da strcmp.
Riepilogo
Avete imparato a confrontare le stringhe in C:
- strcmp restituisce 0 per le stringhe uguali, un valore negativo o positivo per indicarne l'ordine.
- Non usate mai
==sulle stringhe: confronta gli indirizzi. - Verificate sempre
== 0per controllare l'uguaglianza (l'errore dello zero interpretato come falso). - strncmp confronta un prefisso; il confronto senza distinzione tra maiuscole e minuscole richiede
tolower.
Domande Frequenti
La lezione «strcmp e confronto» è gratuita?
Sì — il testo completo di «strcmp e confronto» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.
Cosa imparerò in «strcmp e confronto»?
Confrontare stringhe Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C Academy?
Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «strcmp e confronto»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C Academy?
Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- strlen, strcpy, strcat
- strcmp e confronto
- strtok e tokenizzazione
- memcpy e memset