Programare C

Comparație de șiruri Programare C

Comparație de șiruri Programare C
Un șir în limbajul C este o matrice de caractere, care se termină cu un caracter nul (\ 0). Utilizarea acestei proprietăți sunt comparate șiruri.

Două șiruri pot fi comparate în diferite moduri. În acest tutorial, mai întâi, vom vedea o funcție definită de utilizator pentru a compara două șiruri și apoi vom vedea câteva funcții de bibliotecă încorporate care pot fi utilizate pentru a compara două șiruri foarte ușor. Asadar, haideti sa începem.

Comparația șirurilor folosind o funcție definită de utilizator:

Vom scrie o funcție stringCompare () pentru a compara șirurile. Parcurgem șirurile și comparăm fiecare caracter al șirului până când ajungem la sfârșitul oricăruia sau se găsesc una sau ambele nepotrivite. Dacă traversarea este atinsă până la capătul ambelor corzi, atunci corzile sunt potrivite; în caz contrar, șirurile sunt nepotrivite.

01. / * userDefinedFunction.c * /
02.
03. #include
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. pauză;
13. i ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. retur 0;
18. altceva
19. retur -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Introduceți primul șir:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Introduceți al doilea șir:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. if (stringCompare (str1, str2) == 0)
34. printf ("Șirurile sunt egale \ n");
35. altceva
36. printf ("Șirurile nu sunt egale \ n");
37.
38. retur 0; 39.

Aici traversăm șirurile folosind bucla while și o variabilă eu. Când caracterele sunt egale în aceeași poziție a ambelor șiruri, valoarea lui eu este incrementat cu 1 (linia 13). Dacă caracterele nu sunt egale (linia 09) sau ajungem la sfârșitul șirului (linia 11), atunci bucla while este o pauză. După bucla while, verificăm dacă ambele traversări ale șirului sunt atinse până la capăt sau nu (linia 16). Dacă traversarea este atinsă până la capătul ambelor șiruri, atunci șirurile sunt egale altfel nu.

Comparație de șiruri folosind funcțiile bibliotecii încorporate:

Următoarele funcții de bibliotecă pot fi utilizate pentru compararea șirurilor. Toate funcțiile sunt declarate în şir.h fișier antet.

funcția strcmp ():

Această funcție compară două șiruri trecute funcției.

Sintaxă:

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

Valoare returnată: Returnează 0 dacă șirurile sunt egale. Returnează un număr întreg negativ dacă valoarea ASCII a primului caracter de neegalat al primului șir este mai mică decât al doilea șir. Returnează un număr întreg pozitiv dacă valoarea ASCII a primului caracter de neegalat din primul șir este mai mare decât al doilea șir. Unele sisteme returnează diferența dintre valoarea ASCII a primului caracter nepotrivit și unele sisteme returnează -1 dacă valoarea ASCII a primului caracter neegalat din primul șir este mai mică decât al doilea șir și returnează 1 dacă valoarea ASCII a primului caracter neegalat al primul șir este mai mare decât al doilea șir.

Exemplu Valoare returnată Explicaţie
strcmp ( „Hello World”, „Hello World” ) 0 Două șiruri sunt la fel.
strcmp ( „Hello”, „Hello \ 0 World” ) 0 Șirurile sunt comparate până la caracterul „\ 0”. Primul șir se termină implicit cu „\ 0”, iar al doilea șir conține caracterul „\ 0” după „Bună ziua”.
strcmp ( „Hello \ 0 \ 0 \ 0", „Hello \ 0 World” ) 0 Șirurile sunt comparate până la caracterul „\ 0”.
strcmp ( „Hello World”, „hello World” ) Întreg negativ Valoarea ASCII a primului caracter de neegalat al primului șir („H”) este mai mică decât al doilea șir („h”)
strcmp („Hello World”, „Hello World” ) Număr întreg pozitiv Valoarea ASCII a primului caracter de neegalat al primului șir („h”) este mai mare decât al doilea șir („H”)

funcția strncmp ():

Această funcție este similară cu funcția strcmp (), dar aici trebuie să specificăm câți octeți sunt comparați prin trecerea unui argument suplimentar funcției.

Sintaxă:

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

Valoare returnată: Funcția revine 0 dacă primul n caracterele celor două șiruri sunt egale; în caz contrar, returnează un număr întreg negativ sau pozitiv în funcție de semnul diferențelor dintre valoarea ASCII a primului caracter nepotrivit.

Exemplu Valoare returnată Explicaţie
strncmp ( „Hello World”, „Hello World”, 5 ) 0 Primele 5 caractere sunt aceleași.
strncmp ( „Hello”, „Hello \ 0 World”, 5 ) 0 Primele 5 caractere sunt aceleași.
strncmp ( „Hello \ 0 \ 0 \ 0", „Hello \ 0 World”, 8 ) 0 „\ 0” este după primele 5 caractere din ambele șiruri. Deci, comparația este oprită după 5 nu 8.
strncmp ( „Hello World”, „hello World”, 5 ) Întreg negativ Valoarea ASCII a primului caracter de neegalat al primului șir („H”) este mai mică decât al doilea șir („h”)

funcția strcasecmp ():

Această funcție este similară cu funcția strcmp (), dar aici șirurile nu sunt sensibile la majuscule și minuscule.

Sintaxă:

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

Valoare returnată: La fel ca strcmp (), dar șirurile sunt tratate ca minuscule / minuscule.

Exemplu Valoare returnată Explicaţie
strcasecmp ( „Hello World”, „Hello World” ) 0 Două șiruri sunt la fel.
strcasecmp ( „Hello”, „Hello \ 0 World” ) 0 Șirurile sunt comparate până la caracterul „\ 0”. Primul șir se încheie în mod implicit cu „\ 0”, iar al doilea șir conține caracterul „\ 0” după „Bună ziua”.
strcasecmp ( „Hello World”, „hello World” ) 0 Corzile sunt minuscule / minuscule. Deci, „Hello World” și „hello World” sunt la fel.

funcția strncasecmp ():

Această funcție este similară cu funcția strncmp (), dar aici șirurile nu sunt sensibile la majuscule și minuscule.

Sintaxă:

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

Valoare returnată: La fel ca strncmp (), atunci când șirurile sunt tratate ca minuscule / minuscule.

Exemplu Valoare returnată Explicaţie
strncasecmp ( „Hello World”, „Hello World”, 5 ) 0 Primele 5 caractere sunt aceleași.
strncasecmp ( „Hello”, „Hello \ 0 World”, 5 ) 0 Primele 5 caractere sunt aceleași.
strncasecmp ( „Hello \ 0 \ 0 \ 0", „Hello \ 0 World”, 8 ) 0 „\ 0” este după primele 5 caractere din ambele șiruri. Deci, comparația este oprită după 5 nu 8.
strncasecmp ( „Hello World”, „hello World”, 5 ) 0 Corzile sunt minuscule / minuscule. Deci, „Bună ziua” și „buna ziua” sunt la fel.

funcția memcmp ():

Această funcție compară două blocuri de memorie octet cu octet. Trebuie să trecem doi indicatori ai blocurilor de memorie și numărul de octeți de comparat.

Sintaxă:

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

Valoare returnată: Funcția returnează 0 dacă cele două blocuri de memorie (n octeți) sunt egali; în caz contrar, returnează diferențele dintre prima pereche de octeți nepotrivită (octeții sunt interpretați ca obiecte char nesemnate, apoi promovate în int).

Exemplu Valoare returnată Explicaţie
memcmp ( „Hello World”, „Hello World”, 5 ) 0 Primele 5 caractere sunt aceleași.
memcmp ( „Hello \ 0 \ 0 \ 0", „Hello \ 0 World”, 8 ) Întreg negativ Primele 6 caractere sunt aceleași, dar al 7-lea personaj este diferit. Aici comparația nu sa oprit ca strncmp () când obțineți caracterul „\ 0”.
memcmp ( „Hello World”, „hello World”, 11 ) Întreg negativ Valoarea ASCII a primului caracter de neegalat al primului șir („H”) este mai mică decât al doilea șir („h”)

Exemplu:

Urmează exemplul codului C al tuturor funcțiilor discutate.

01. / * stringCompară.c * /
02.
03. #include
04. #include
05.
06. int main ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" Hello "," Hello \\ 0 World ") =>% d \ n", strcmp ("Hello", "Hello \ 0 World"));
10. printf ("strcmp (" Hello World "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ") =>% d \ n", strcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Lumea "));
12.
13. printf ("\ n --------------- \ n");
14.
15. printf ("strncmp (" Hello World "," Hello World ", 5) =>% d \ n", strncmp ("Hello World", "Hello World", 5));
16. printf ("strncmp (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncmp ("Hello", "Hello \ 0 World", 5));
17. printf ("strncmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Lumea ", 8));
18. printf ("strncmp (" Hello World "," hello World ", 5) =>% d \ n", strncmp ("Hello World", "hello World", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" Hello "," Hello \\ 0 World ") =>% d \ n", strcasecmp ("Hello", "Hello \ 0 World"));
24. printf ("strcasecmp (" Hello World "," hello World ") =>% d \ n", strcasecmp ("Hello World", "hello World"));
25.
26. printf ("\ n --------------- \ n");
27.
28. printf ("strncasecmp (" Hello World "," Hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "Hello World", 5));
29. printf ("strncasecmp (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncasecmp ("Hello", "Hello \ 0 World", 5));
30. printf ("strncasecmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Lumea ", 8));
31. printf ("strncasecmp (" Hello World "," hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "hello World", 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 Lumea ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. retur 0; 40.

Concluzie:

Deci, în acest tutorial, am văzut cum șirurile pot fi comparate în diferite moduri. După cum am văzut, funcția stringCompare () returnează -1 pentru șirurile inegale, dar aceasta poate fi modificată astfel încât să returneze valoarea ASCII a caracterului nepotrivit. Îl puteți folosi în codul dvs., care este cel mai potrivit pentru dvs.

How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Remap your mouse buttons differently for different software with X-Mouse Button Control
Maybe you need a tool that could make your mouse's control change with every application that you use. If this is the case, you can try out an applica...
Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...