C Programmazione

Confronto di stringhe Programmazione C

Confronto di stringhe Programmazione C
Una stringa in linguaggio C è un array di caratteri, che termina con un carattere null (\0). Usando questa proprietà le stringhe vengono confrontate.

Due stringhe possono essere confrontate in vari modi. In questo tutorial, in primo luogo, vedremo una funzione definita dall'utente per confrontare due stringhe, quindi vedremo alcune funzioni di libreria integrate che possono essere utilizzate per confrontare due stringhe molto facilmente. Quindi iniziamo.

Confronto di stringhe utilizzando una funzione definita dall'utente:

Scriveremo una funzione stringaCompare() confrontare le stringhe. Attraversiamo le stringhe e confrontiamo ogni carattere della stringa finché non raggiungiamo la fine di uno o entrambi o viene trovato uno non corrispondente. Se l'attraversamento viene raggiunto alla fine di entrambe le stringhe, le stringhe vengono abbinate; in caso contrario, le stringhe non corrispondono.

01. /*funzione definita dall'utente.c*/
02.
03. #includere
04.
05. int stringCompare( char str1[ ], char str2[ ] )
06.
07. int i=0;
08.
09. while( str1[i] == str2[i] )
10.
11. if( str1[i] == '\0' || str2[i] == '\0' )
12. rompere;
13. io++;
14.
15.
16. if( str1[i] == '\0' && str2[i] == '\0' )
17. restituisce 0;
18. altro
19. ritorno -1;
20.
21.
22.
23.
24. intero principale()
25.
26. char str1[30],str2[30];
27.
28. printf("Inserisci la prima stringa: ");
29. scanf("%[^\n]%*c",str1);
30. printf("Inserisci la seconda stringa: ");
31. scanf("%[^\n]%*c",str2);
32.
33. if(stringCompare(str1,str2) == 0)
34. printf("Le stringhe sono uguali \n");
35. altro
36. printf("Le stringhe non sono uguali \n");
37.
38. restituisce 0; 39.

Qui attraversiamo le stringhe usando il ciclo while e una variabile io. Quando i caratteri sono uguali nella stessa posizione di entrambe le stringhe, il valore di io viene incrementato di 1 (riga 13). Se i caratteri non sono uguali (riga 09) o raggiungiamo la fine della stringa (riga 11), il ciclo while è un'interruzione. Dopo il ciclo while, controlliamo che entrambi gli attraversamenti di stringa siano raggiunti o meno (riga 16). Se l'attraversamento viene raggiunto alla fine di entrambe le stringhe, le stringhe sono uguali altrimenti no.

Confronto di stringhe utilizzando le funzioni di libreria integrate:

Le seguenti funzioni di libreria possono essere utilizzate per il confronto di stringhe. Tutte le funzioni sono dichiarate nel corda.h file di intestazione.

funzione strcmp():

Questa funzione confronta due stringhe passate alla funzione.

Sintassi:

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

Valore di ritorno: Restituisce 0 se le stringhe sono uguali. Restituisce un numero intero negativo se il valore ASCII del primo carattere senza corrispondenza della prima stringa è minore della seconda stringa. Restituisce un intero positivo se il valore ASCII del primo carattere senza corrispondenza della prima stringa è maggiore della seconda stringa. Alcuni sistemi restituiscono la differenza del valore ASCII del primo carattere non corrispondente e alcuni sistemi restituiscono -1 se il valore ASCII del primo carattere non corrispondente della prima stringa è inferiore alla seconda stringa e restituiscono 1 se il valore ASCII del primo carattere non corrispondente di la prima stringa è maggiore della seconda stringa.

Esempio Valore di ritorno Spiegazione
strcmp( "Ciao mondo", "Ciao mondo" ) 0 Due corde sono uguali.
strcmp( “Ciao”,”Ciao\0 Mondo” ) 0 Le stringhe vengono confrontate fino al carattere '\0'. La prima stringa per impostazione predefinita termina con '\0' e la seconda stringa contiene il carattere '\0' dopo 'Hello'.
strcmp( “Ciao\0\0\0”,”Ciao\0 Mondo” ) 0 Le stringhe vengono confrontate fino al carattere '\0'.
strcmp( "Ciao mondo", "Ciao mondo" ) Intero negativo Il valore ASCII del primo carattere senza corrispondenza della prima stringa ('H') è minore della seconda stringa ('h')
strcmp(“ciao mondo”,”ciao mondo” ) Intero positivo Il valore ASCII del primo carattere senza corrispondenza della prima stringa ('h') è maggiore della seconda stringa ('H')

strncmp() funzione:

Questa funzione è simile alla funzione strcmp(), ma qui dobbiamo specificare quanti byte vengono confrontati passando un argomento in più alla funzione.

Sintassi:

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

Valore di ritorno: La funzione ritorna 0 se il primo n i caratteri delle due stringhe sono uguali; in caso contrario, restituisce un intero negativo o positivo a seconda del segno delle differenze tra il valore ASCII del primo carattere non corrispondente.

Esempio Valore di ritorno Spiegazione
strncmp( “Ciao mondo”,”Ciao mondo”,5 ) 0 I primi 5 caratteri sono gli stessi.
strncmp( “Ciao”,”Ciao\0 Mondo”,5 ) 0 I primi 5 caratteri sono gli stessi.
strncmp( “Ciao\0\0\0”,”Ciao\0 Mondo”,8 ) 0 '\0' è dopo i primi 5 caratteri in entrambe le stringhe. Quindi, il confronto viene interrotto dopo 5 e non 8.
strncmp( “Ciao mondo”,”ciao mondo”,5 ) Intero negativo Il valore ASCII del primo carattere senza corrispondenza della prima stringa ('H') è minore della seconda stringa ('h')

strcasecmp() funzione:

Questa funzione è simile alla funzione strcmp(), ma qui le stringhe non fanno distinzione tra maiuscole e minuscole.

Sintassi:

int strcasecmp(const char *str1, const char *str2)

Valore di ritorno: Uguale a strcmp(), ma le stringhe sono trattate come distinzione tra maiuscole e minuscole.

Esempio Valore di ritorno Spiegazione
strcasecmp( "Ciao mondo", "Ciao mondo" ) 0 Due corde sono uguali.
strcasecmp( “Ciao”,”Ciao\0 Mondo” ) 0 Le stringhe vengono confrontate fino al carattere '\0'. La prima stringa per impostazione predefinita termina con '\0' e la seconda stringa contiene il carattere '\0' dopo 'Hello'.
strcasecmp( "Ciao mondo", "Ciao mondo" ) 0 Le stringhe sono distinzione tra maiuscole e minuscole. Quindi, "Hello World" e "hello World" sono la stessa cosa.

strnsecmp() funzione:

Questa funzione è simile alla funzione strncmp(), ma qui le stringhe non fanno distinzione tra maiuscole e minuscole.

Sintassi:

int strncasecmp(const char *str1, const char *str2)

Valore di ritorno: Uguale a strncmp(), quando le stringhe vengono trattate come maiuscole e minuscole.

Esempio Valore di ritorno Spiegazione
strnsecmp( “Ciao mondo”,”Ciao mondo”,5 ) 0 I primi 5 caratteri sono gli stessi.
strnsecmp( “Ciao”,”Ciao\0 Mondo”,5 ) 0 I primi 5 caratteri sono gli stessi.
strnsecmp( “Ciao\0\0\0”,”Ciao\0 Mondo”,8 ) 0 '\0' è dopo i primi 5 caratteri in entrambe le stringhe. Quindi, il confronto viene interrotto dopo 5 e non 8.
strnsecmp( “Ciao mondo”,”ciao mondo”,5 ) 0 Le stringhe sono distinzione tra maiuscole e minuscole. Quindi, "Ciao" e "Ciao" sono la stessa cosa.

funzione memcmp():

Questa funzione confronta due blocchi di memoria byte per byte. Dobbiamo passare due puntatori dei blocchi di memoria e il numero di byte da confrontare.

Sintassi:

int memcmp(const void *str1, const void *str2, size_t n)

Valore di ritorno: La funzione restituisce 0 se i due blocchi di memoria (n byte) sono uguali; in caso contrario, restituisce le differenze tra la prima coppia di byte non corrispondenti (i byte vengono interpretati come oggetti char senza segno, quindi promossi a int).

Esempio Valore di ritorno Spiegazione
memmp( “Ciao mondo”,”Ciao mondo”,5 ) 0 I primi 5 caratteri sono gli stessi.
memmp( “Ciao\0\0\0”,”Ciao\0 Mondo”,8 ) Intero negativo I primi 6 caratteri sono gli stessi, ma il settimo carattere è diverso. Qui il confronto non si è fermato like strncmp() quando si ottiene il carattere '\0'.
memmp( “Ciao mondo”,”ciao mondo”,11 ) Intero negativo Il valore ASCII del primo carattere senza corrispondenza della prima stringa ('H') è minore della seconda stringa ('h')

Esempio:

Di seguito è riportato l'esempio di codice C di tutte le funzioni discusse.

01. /*stringCompare.c*/
02.
03. #includere
04. #includere
05.
06. intero principale()
07.
08. printf("strcmp("Ciao mondo","Ciao mondo" ) => %d\n",strcmp("Ciao mondo","Ciao mondo" ));
09. printf("strcmp("Ciao","Ciao\\0 Mondo" ) => %d\n",strcmp("Ciao","Ciao\0 Mondo" ));
10. printf("strcmp("Ciao mondo","ciao mondo" ) => %d\n",strcmp("Ciao mondo","ciao mondo" ) );
11. printf("strcmp("Ciao\\0\\0\\0","Ciao\\0 Mondo" ) => %d\n",strcmp( "Ciao\0\0\0","Ciao\0 mondo" ));
12.
13. printf("\n---------------\n");
14.
15. printf("strncmp("Ciao mondo","Ciao mondo",5 ) => %d\n",strncmp( "Ciao mondo","Ciao mondo",5 ));
16. printf("strncmp( "Ciao","Ciao\\0 Mondo",5 ) => %d\n",strncmp( "Ciao","Ciao\0 Mondo",5 ));
17. printf("strncmp("Ciao\\0\\0\\0","Ciao\\0 Mondo",8 ) => %d\n",strncmp( "Ciao\0\0\0","Ciao \0 Mondo",8 ));
18. printf("strncmp("Ciao mondo","ciao mondo",5 ) => %d\n",strncmp( "Ciao mondo","ciao mondo",5 ));
19.
20. printf("\n---------------\n");
21.
22. printf("strcasecmp("Hello World","Hello World" ) => %d\n",strcasecmp("Hello World","Hello World" ));
23. printf("strcasecmp( "Ciao","Ciao\\0 Mondo" ) => %d\n",strcasecmp( "Ciao","Ciao\0 Mondo" ));
24. printf("strcasecmp("Ciao mondo","ciao mondo" ) => %d\n",strcasecmp("Ciao mondo","ciao mondo" ));
25.
26. printf("\n---------------\n");
27.
28. printf("strncasecmp( "Ciao mondo","Ciao mondo",5 ) => %d\n",strncasecmp( "Ciao mondo","Ciao mondo",5 ) );
29. printf("strncasecmp( "Ciao","Ciao\\0 Mondo",5 ) => %d\n",strncasecmp( "Ciao","Ciao\0 Mondo",5 ));
30. printf("strncasecmp( "Ciao\\0\\0\\0","Ciao\\0 Mondo",8 ) => %d\n",strncasecmp( "Ciao\0\0\0","Ciao \0 Mondo",8 ));
31. printf("strncasecmp( "Ciao mondo","ciao mondo",5 ) => %d\n",strncasecmp( "Ciao mondo","ciao mondo",5 ));
32.
33. printf("\n---------------\n");
34.
35. printf("memcmp("Ciao mondo","Ciao mondo",5 ) => %d\n",memcmp( "Ciao mondo","Ciao mondo",5 ) );
36. printf("memcmp("Ciao\\0\\0\\0","Ciao\\0 Mondo",8 ) => %d\n",memcmp( "Ciao\0\0\0","Ciao \0 Mondo",8 ));
37. printf("memcmp("Ciao mondo","ciao mondo",11 ) => %d\n",memcmp( "Ciao mondo","ciao mondo",11 ));
38.
39. restituisce 0; 40.

Conclusione:

Quindi, in questo tutorial, abbiamo visto come le stringhe possono essere confrontate in vari modi. Come abbiamo visto, la funzione stringCompare() restituisce -1 per stringhe non uguali, ma questo può essere modificato in modo che restituisca il valore ASCII del carattere non corrispondente. Puoi usarlo nel tuo codice, che è più adatto a te.

Il cursore salta o si sposta in modo casuale durante la digitazione in Windows 10
Se scopri che il cursore del mouse salta o si sposta da solo, automaticamente, in modo casuale durante la digitazione nel laptop o nel computer Window...
Come invertire la direzione di scorrimento del mouse e dei touchpad in Windows 10
Topo e Touchpads non solo rende l'elaborazione semplice, ma anche più efficiente e richiede meno tempo. Non possiamo immaginare una vita senza questi ...
Come modificare il puntatore del mouse e le dimensioni, il colore e lo schema del cursore su Windows 10
Il puntatore del mouse e il cursore in Windows 10 sono aspetti molto importanti del sistema operativo. Questo si può dire anche per altri sistemi oper...