Confronto di stringhe: programmazione in C

String Comparison C Programming



Una stringa in linguaggio C è un array di caratteri, che termina con un carattere null (). 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() per confrontare le stringhe. Attraversiamo le stringhe e confrontiamo ogni carattere della stringa fino a quando non raggiungiamo la fine di una o entrambe o se ne trova una 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.intstringaCompare( charstr1[ ], charstr2[ ] )
06.{
07.intio=0;
08.
09. mentre(str1[io] ==str2[io] )
10.
quindici.
16.Se(str1[io] == ' 0' &&str2[io] == ' 0' )
17.Restituzione 0;
18.altro
19.Restituzione -1;
venti.
ventuno.}
22.
2. 3.
24.intprincipale()
25.{
26.charstr1[30],str2[30];
27.
28. printf ('Inserisci la prima stringa: ');
29. scanf ('% [^ ]% * C ',str1);
30. printf ('Inserisci la seconda stringa: ');
31. scanf ('% [^ ]% * C ',str2);
32.
33.Se(stringaCompare(str1,str2) == 0)
3. 4. printf ('Le stringhe sono uguali ');
35.altro
36. printf ('Le stringhe non sono uguali ');
37.
38.Restituzione 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 string.h file di intestazione.



funzione strcmp():

Questa funzione confronta due stringhe passate alla funzione.

Sintassi :

int strcmp (cost char *str1, cost 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 è inferiore alla seconda stringa. Restituisce un numero 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 mondo ) 0 Le stringhe vengono confrontate fino al carattere ''. La prima stringa per impostazione predefinita termina con '' e la seconda stringa contiene il carattere '' dopo 'Ciao'.
strcmp( Ciao″,Ciao Mondo ) 0 Le stringhe vengono confrontate fino al carattere ''.
strcmp( Ciao mondo, ciao mondo ) Intero negativo Il valore ASCII del primo carattere senza corrispondenza della prima stringa ('H') è inferiore alla 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 (cost char *str1, cost char *str2, taglia_tn)

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 mondo,5 ) 0 I primi 5 caratteri sono gli stessi.
strncmp( Ciao″,Ciao Mondo,8 ) 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') è inferiore alla seconda stringa ('h')

strcasecmp() funzione:

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

Sintassi:

intstrcasecmp(cost char *str1, cost 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 mondo ) 0 Le stringhe vengono confrontate fino al carattere ''. La prima stringa per impostazione predefinita termina con '' e la seconda stringa contiene il carattere '' dopo 'Ciao'.
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:

intstrnsecmp(cost char *str1, cost char *str2)

Valore di ritorno: Uguale a strncmp() , quando le stringhe vengono trattate come distinzione tra 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 mondo,5 ) 0 I primi 5 caratteri sono gli stessi.
strnsecmp( Ciao″,Ciao Mondo,8 ) 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 memmp (cost vuoto *str1, cost vuoto *str2, taglia_tn)

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″,Ciao 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 ''.
memmp( Ciao mondo, ciao mondo, 11 ) Intero negativo Il valore ASCII del primo carattere senza corrispondenza della prima stringa ('H') è inferiore alla 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.intprincipale()
07.{
08. printf ('strcmp('Ciao mondo','Ciao mondo' ) => %d ', strcmp ( 'Ciao mondo','Ciao mondo' ));
09. printf ('strcmp('Ciao','Ciao\0Mondo' ) => %d ', strcmp ( 'Ciao','Ciao 0Mondo' ));
10. printf ('strcmp('Ciao mondo','Ciao mondo' ) => %d ', strcmp ( 'Ciao mondo','Ciao mondo' ) );
undici. printf ('strcmp('Ciao\0\0\0','Ciao\0Mondo' ) => %d ', strcmp ( 'Ciao 0 0 0','Ciao 0Mondo' ));
12.
13. printf (' --------------- ');
14.
quindici. printf ('strncmp('Ciao mondo','Ciao mondo',5 ) => %d ', strncmp ( 'Ciao mondo','Ciao mondo',5 ));
16. printf ('strncmp('Ciao','Ciao\0Mondo',5 ) => %d ', strncmp ( 'Ciao','Ciao 0Mondo',5 ));
17. printf ('strncmp('Ciao\0\0\0','Ciao\0Mondo',8 ) => %d ', strncmp ( 'Ciao 0 0 0','Ciao 0Mondo',8 ));
18. printf ('strncmp('Ciao mondo','Ciao mondo',5 ) => %d ', strncmp ( 'Ciao mondo','Ciao mondo',5 ));
19.
venti. printf (' --------------- ');
ventuno.
22. printf ('strcasecmp( 'Ciao mondo','Ciao mondo' ) => %d ',strcasecmp( 'Ciao mondo','Ciao mondo' ));
2. 3. printf ('strcasecmp( 'Ciao','Ciao\0Mondo' ) => %d ',strcasecmp( 'Ciao','Ciao 0Mondo' ));
24. printf ('strcasecmp( 'Ciao mondo','Ciao mondo' ) => %d ',strcasecmp( 'Ciao mondo','Ciao mondo' ));
25.
26. printf (' --------------- ');
27.
28. printf ('strnsecmp( 'Ciao mondo','Ciao mondo',5 ) => %d ',strnsecmp( 'Ciao mondo','Ciao mondo',5 ) );
29. printf ('strnsecmp( 'Ciao','Ciao\0Mondo',5 ) => %d ',strnsecmp( 'Ciao','Ciao 0Mondo',5 ));
30. printf ('strnsecmp( 'Ciao\0\0\0','Ciao\0Mondo',8 ) => %d ',strnsecmp( 'Ciao 0 0 0','Ciao 0Mondo',8 ));
31. printf ('strnsecmp( 'Ciao mondo','Ciao mondo',5 ) => %d ',strnsecmp( 'Ciao mondo','Ciao mondo',5 ));
32.
33. printf (' --------------- ');
3. 4.
35. printf ('memcmp('Ciao mondo','Ciao mondo',5 ) => %d ', memmp ( 'Ciao mondo','Ciao mondo',5 ) );
36. printf ('memcmp('Ciao\0\0\0','Ciao\0Mondo',8 ) => %d ', memmp ( 'Ciao 0 0 0','Ciao 0Mondo',8 ));
37. printf ('memcmp('Ciao mondo','Ciao mondo',11 ) => %d ', memmp ( 'Ciao mondo','Ciao mondo',undici ));
38.
39.Restituzione 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 può essere modificata in modo che restituisca il valore ASCII del carattere non corrispondente. Puoi usarlo nel tuo codice, che è più adatto a te.