String Confronto C Programmazione

String Confronto C Programmazione
Una stringa in lingua C è un array di caratteri, che è terminato con un carattere null (\ 0). L'uso di queste stringhe di proprietà viene confrontata.

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 stringa utilizzando una funzione definita dall'utente:

Scriveremo una funzione StringCompare () Per confrontare le stringhe. Attraversiamo le stringhe e confrontiamo ogni carattere della stringa fino a raggiungere la fine di uno o entrambi o uno non corrispondente si trova. Se l'attraversamento viene raggiunto alla fine di entrambe le corde, le corde sono abbinate; Altrimenti, le stringhe sono non corrispondenti.

01. /*UserDefinedFunction.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. rottura;
13. I ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. restituzione 0;
18. altro
19. restituzione -1;
20.
21.
22.
23.
24. int main ()
25.
26. Char Str1 [30], STR2 [30];
27.
28. printf ("Immettere la prima stringa:");
29. scanf ("%[^\ n]%*c", str1);
30. printf ("Immettere 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. restituzione 0; 39.

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

Confronto di stringhe utilizzando le funzioni della libreria integrata:

Le seguenti funzioni della libreria possono essere utilizzate per il confronto delle stringhe. Tutte le funzioni sono dichiarate in 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: Restituire 0 se le stringhe sono uguali. Restituisci un numero intero negativo se il valore ASCII del primo carattere senza pari della prima stringa è inferiore alla seconda stringa. Restituisci un numero intero positivo se il valore ASCII del primo carattere senza pari 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 senza eguali della prima stringa è inferiore alla seconda stringa e restituisce 1 se il valore ASCII del primo carattere senza eguali di La prima stringa è maggiore della seconda stringa.

Esempio Valore di ritorno Spiegazione
strcmp ( "Hello World", "Hello World" ) 0 Due stringhe sono le stesse.
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", "Hello \ 0 World" ) 0 Le stringhe vengono confrontate fino al carattere '\ 0'.
strcmp ( "Hello World", "Hello World" ) Intero negativo Il valore ASCII del primo carattere senza eguali della prima stringa ('H') è inferiore alla seconda stringa ('H')
strcmp ("Hello World", "Hello World" ) Intero positivo Il valore ASCII del primo carattere senza eguali della prima stringa ('H') è maggiore della seconda stringa ('H')

funzione strncmp ():

Questa funzione è simile alla funzione strcmp (), Ma qui dobbiamo specificare quanti byte vengono confrontati passando un argomento extra 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; Altrimenti, restituisce un numero intero negativo o positivo a seconda del segno delle differenze tra il valore ASCII del primo personaggio non corrispondente.

Esempio Valore di ritorno Spiegazione
strncmp ( "Hello World", "Hello World", 5 ) 0 I primi 5 caratteri sono gli stessi.
strncmp ( "Hello", "Hello \ 0 World", 5 ) 0 I primi 5 caratteri sono gli stessi.
strncmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) 0 '\ 0' è dopo i primi 5 caratteri in entrambe le stringhe. Quindi, il confronto viene fermato dopo 5 non 8.
strncmp ( "Hello World", "Hello World", 5 ) Intero negativo Il valore ASCII del primo carattere senza eguali della prima stringa ('H') è inferiore alla seconda stringa ('H')

funzione strcasecmp ():

Questa funzione è simile alla funzione strcmp (), Ma qui le stringhe non sono sensibili al caso.

Sintassi:

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

Valore di ritorno: Uguale a strcmp (), ma le stringhe sono trattate come caso-sensibile.

Esempio Valore di ritorno Spiegazione
strcasecmp ( "Hello World", "Hello World" ) 0 Due stringhe sono le stesse.
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 ( "Hello World", "Hello World" ) 0 Le corde sono caso-sensibile. Quindi, "Hello World" e "Hello World" sono gli stessi.

funzione strncasecmp ():

Questa funzione è simile alla funzione strncmp (), Ma qui le stringhe non sono sensibili al caso.

Sintassi:

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

Valore di ritorno: Uguale a strncmp (), Quando le stringhe vengono trattate come sensibili al caso.

Esempio Valore di ritorno Spiegazione
strncasecmp ( "Hello World", "Hello World", 5 ) 0 I primi 5 caratteri sono gli stessi.
strncasecmp ( "Hello", "Hello \ 0 World", 5 ) 0 I primi 5 caratteri sono gli stessi.
strncasecmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) 0 '\ 0' è dopo i primi 5 caratteri in entrambe le stringhe. Quindi, il confronto viene fermato dopo 5 non 8.
strncasecmp ( "Hello World", "Hello World", 5 ) 0 Le corde sono caso-sensibile. Quindi, "ciao" e "ciao" sono gli stessi.

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; Altrimenti, restituisce le differenze tra la prima coppia di byte non corrispondenti (i byte sono interpretati come oggetti char non firmati, quindi promossi a int).

Esempio Valore di ritorno Spiegazione
memcmp ( "Hello World", "Hello World", 5 ) 0 I primi 5 caratteri sono gli stessi.
memcmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 World", 8 ) Intero negativo I primi 6 caratteri sono uguali, ma il settimo personaggio è diverso. Qui il confronto non si è fermato come strncmp () Quando si ottiene il personaggio '\ 0'.
memcmp ( "Hello World", "Hello World", 11 ) Intero negativo Il valore ASCII del primo carattere senza eguali della prima stringa ('H') è inferiore alla seconda stringa ('H')

Esempio:

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

01. /*StringCompare.C*/
02.
03. #includere
04. #includere
05.
06. int main ()
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 world ") => %d \ n", strcmp ("ciao \ 0 \ 0 \ 0", "Hello \ 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 (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) => %d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 World ", 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 (" ciao mondo "," ciao mondo ") => %d \ n", strcasecmp ("ciao mondo", "ciao mondo"));
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 ("hello world", "ciao mondo", 5));
29. printf ("strncasecmp (" ciao "," ciao \\ 0 mondo ", 5) => %d \ n", strncasecmp ("hello", "ciao \ 0 mondo", 5));
30. printf ("strncasecmp (" ciao \\ 0 \\ 0 \\ 0 "," ciao \\ 0 world ", 8) => %d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 World ", 8));
31. printf ("strncasecmp (" ciao mondo "," ciao mondo ", 5) => %d \ n", strncasecmp ("hello world", "ciao mondo", 5));
32.
33. printf ("\ n ------------------- \ n");
34.
35. printf ("Memcmp (" Hello World "," Hello World ", 5) => %d \ n", Memcmp ("Hello World", "Hello World", 5));
36. printf ("Memcmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) => %d \ n", Memcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 World ", 8));
37. printf ("Memcmp (" Hello World "," Hello World ", 11) => %d \ n", Memcmp ("Hello World", "Hello World", 11));
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 ineguali, 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.