C Programmēšana

Stīgu salīdzināšana C programmēšana

Stīgu salīdzināšana C programmēšana
Virkne C valodā ir rakstzīmju masīvs, kas tiek izbeigts ar nulles rakstzīmi (\ 0). Izmantojot šo rekvizītu virknes, tiek salīdzinātas.

Divas stīgas var dažādi salīdzināt. Šajā apmācībā vispirms redzēsim lietotāja definētu funkciju, lai salīdzinātu divas virknes, un pēc tam redzēsim dažas iebūvētas bibliotēkas funkcijas, kuras var izmantot, lai ļoti viegli salīdzinātu divas virknes. Tātad, sāksim darbu.

Stīgu salīdzinājums, izmantojot lietotāja definētu funkciju:

Mēs uzrakstīsim funkciju stringCompare () salīdzināt stīgas. Mēs šķērsojam virknes un salīdzinām katru virknes rakstzīmi, līdz mēs sasniedzam kādu no tām vai tiek atrasti abi, vai tiek atrasts viens neatbilstošs. Ja šķērsošana tiek sasniegta līdz abu stīgu beigām, tad stīgas tiek saskaņotas; pretējā gadījumā virknes ir neatbilstošas.

01. / * userDefinedFunction.c * /
02.
03. # iekļaut
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. kamēr (str1 [i] == str2 [i])
10.
11. ja (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. pārtraukums;
13. i ++;
14.
15.
16. ja (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. atgriešanās 0;
18. cits
19. atgriešanās -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Ievadiet pirmo virkni:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Ievadiet otro virkni:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. ja (stringCompare (str1, str2) == 0)
34. printf ("Stīgas ir vienādas \ n");
35. cits
36. printf ("Stīgas nav vienādas \ n");
37.
38. atgriešanās 0; 39.

Šeit mēs šķērsojam virknes, izmantojot while ciklu un mainīgo i. Ja rakstzīmes ir vienādas abu virkņu vienā pozīcijā, vērtība i tiek palielināts ar 1 (13. rindiņa). Ja rakstzīmes nav vienādas (09. rinda) vai mēs sasniedzam virknes beigas (11. rinda), tad cilpa while ir pārtraukums. Pēc brīža cilpa mēs pārbaudām, vai abi virknes šķērsošanas punkti ir sasniegti vai nav (16. rindiņa). Ja šķērsošana tiek sasniegta līdz abu virkņu beigām, tad virknes ir vienādas, pretējā gadījumā nē.

Stīgu salīdzinājums, izmantojot iebūvētās bibliotēkas funkcijas:

Virkņu salīdzināšanai var izmantot šādas bibliotēkas funkcijas. Visas funkcijas ir deklarētas virkne.h galvenes fails.

strcmp () funkcija:

Šī funkcija salīdzina divas virknes, kas nodotas funkcijai.

Sintakse:

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

Atgriešanās vērtība: Atgrieziet 0, ja virknes ir vienādas. Atgrieziet negatīvu veselu skaitli, ja pirmās virknes pirmā nesaskaņotā rakstura ASCII vērtība ir mazāka par otro virkni. Atgrieziet pozitīvu veselu skaitli, ja pirmās virknes pirmā nesaskaņotā rakstura ASCII vērtība ir lielāka par otro virkni. Dažas sistēmas atgriež pirmās neatbilstošās rakstzīmes ASCII vērtības starpību un dažas sistēmas atgriež -1, ja pirmās virknes pirmā nesaskaņotā rakstura ASCII vērtība ir mazāka par otro virkni un atgriež 1, ja pirmās nesaskaņotās rakstzīmes ASCII vērtība pirmā virkne ir lielāka par otro virkni.

Piemērs Atgriešanās vērtība Paskaidrojums
strcmp ( “Sveika pasaule”, “Sveika pasaule” ) 0 Divas stīgas ir vienādas.
strcmp ( “Sveiki”, “Sveiki \ 0 pasaule” ) 0 Stīgas salīdzina līdz rakstzīmei \ \ 0. Pirmā virkne pēc noklusējuma beidzas ar “\ 0”, un otrajā virknē pēc “Hello” ir rakstzīme “\ 0”.
strcmp ( Sveiki \ 0 \ 0 \ 0 "," Sveiki \ 0 pasaule " ) 0 Stīgas tiek salīdzinātas līdz rakstzīmei \ \ 0.
strcmp ( “Sveika pasaule”, “sveika pasaule” ) Negatīvs vesels skaitlis Pirmās virknes pirmās nesaskaņotās rakstzīmes ('H') ASCII vērtība ir mazāka par otro virkni ('h')
strcmp (“Sveika pasaule”, “sveika pasaule” ) Pozitīvs vesels skaitlis Pirmās virknes pirmās nesaskaņotās rakstzīmes ('h') ASCII vērtība ir lielāka par otro virkni ('H')

strncmp () funkcija:

Šī funkcija ir līdzīga funkcijai strcmp (), bet šeit mums jānorāda, cik baiti tiek salīdzināti, nododot funkcijai papildu argumentu.

Sintakse:

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

Atgriešanās vērtība: Funkcija atgriežas 0 ja pirmais n abu virkņu rakstzīmes ir vienādas; pretējā gadījumā tas atgriež negatīvu vai pozitīvu veselu skaitli atkarībā no atšķirības pazīmes starp pirmā neatbilstošā rakstzīmes ASCII vērtību.

Piemērs Atgriešanās vērtība Paskaidrojums
strncmp ( “Sveika pasaule”, “Sveika pasaule”, 5. lpp ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncmp ( “Sveiki”, “Sveiki \ 0 pasaule”, 5. lpp ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncmp ( “Sveiki \ 0 \ 0 \ 0”, “Sveiki \ 0 pasaule”, 8. lpp ) 0 '\ 0' ir aiz pirmajām 5 rakstzīmēm abās virknēs. Tātad, salīdzināšana tiek pārtraukta pēc 5, nevis 8.
strncmp ( “Sveika pasaule”, “sveika pasaule”, 5. lpp ) Negatīvs vesels skaitlis Pirmās virknes pirmās nesaskaņotās rakstzīmes ('H') ASCII vērtība ir mazāka par otro virkni ('h')

strcasecmp () funkcija:

Šī funkcija ir līdzīga funkcijai strcmp (), bet šeit virknes nav reģistrjutīgas.

Sintakse:

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

Atgriešanās vērtība: Tāds pats kā strcmp (), bet stīgas tiek uzskatītas par reģistrjutīgs.

Piemērs Atgriešanās vērtība Paskaidrojums
strcasecmp ( “Sveika pasaule”, “Sveika pasaule” ) 0 Divas stīgas ir vienādas.
strcasecmp ( “Sveiki”, “Sveiki \ 0 pasaule” ) 0 Stīgas tiek salīdzinātas līdz rakstzīmei \ \ 0. Pirmā virkne pēc noklusējuma beidzas ar “\ 0”, un otrajā virknē pēc “Hello” ir rakstzīme “\ 0”.
strcasecmp ( “Sveika pasaule”, “sveika pasaule” ) 0 Stīgas ir reģistrjutīgs. Tātad “Sveika pasaule” un “Sveika pasaule” ir vienādas.

strncasecmp () funkcija:

Šī funkcija ir līdzīga funkcijai strncmp (), bet šeit virknes nav reģistrjutīgas.

Sintakse:

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

Atgriešanās vērtība: Tāds pats kā strncmp (), kad virknes tiek uzskatītas par reģistrjutīgām.

Piemērs Atgriešanās vērtība Paskaidrojums
strncasecmp ( “Sveika pasaule”, “Sveika pasaule”, 5. lpp ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncasecmp ( “Sveiki”, “Sveiki \ 0 pasaule”, 5. lpp ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncasecmp ( “Sveiki \ 0 \ 0 \ 0”, “Sveiki \ 0 pasaule”, 8. lpp ) 0 '\ 0' ir aiz pirmajām 5 rakstzīmēm abās virknēs. Tātad, salīdzināšana tiek pārtraukta pēc 5, nevis 8.
strncasecmp ( “Sveika pasaule”, “sveika pasaule”, 5. lpp ) 0 Stīgas ir reģistrjutīgs. Tātad, “Sveiki” un “Sveiki” ir vienādi.

memcmp () funkcija:

Šī funkcija salīdzina divus atmiņas bloku baitus pēc baita. Mums ir jānokārto divi atmiņas bloku rādītāji un baitu skaits, lai tos salīdzinātu.

Sintakse:

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

Atgriešanās vērtība: Funkcija atgriež 0, ja abi atmiņas bloki (n baiti) ir vienādi; pretējā gadījumā tas atgriež atšķirības starp pirmo nesakritīgo baitu pāri (baiti tiek interpretēti kā neparakstītie char objekti, pēc tam paaugstināti par int).

Piemērs Atgriešanās vērtība Paskaidrojums
memcmp ( “Sveika pasaule”, “Sveika pasaule”, 5. lpp ) 0 Pirmās 5 rakstzīmes ir vienādas.
memcmp ( “Sveiki \ 0 \ 0 \ 0”, “Sveiki \ 0 pasaule”, 8. lpp ) Negatīvs vesels skaitlis Pirmās 6 rakstzīmes ir vienādas, bet 7. rakstzīme ir atšķirīga. Šeit salīdzinājums nav apstājies kā strncmp () iegūstot rakstzīmi \ 0.
memcmp ( “Sveika pasaule”, “sveika pasaule”, 11. lpp ) Negatīvs vesels skaitlis Pirmās virknes pirmās nesaskaņotās rakstzīmes ('H') ASCII vērtība ir mazāka par otro virkni ('h')

Piemērs:

Tālāk sniegts visu apspriesto funkciju C koda piemērs.

01. / * virkneSalīdzināt.c * /
02.
03. # iekļaut
04. # iekļaut
05.
06. int main ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" Sveiki "," Sveiki \\ 0 pasaule ") =>% d \ n", strcmp ("Sveiki", "Sveiki \ 0 pasaule"));
10. printf ("strcmp (" Sveika pasaule "," sveika pasaule ") =>% d \ n", strcmp ("Sveika pasaule", "sveika pasaule"));
11. printf ("strcmp (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaule ") =>% d \ n", strcmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki \ 0 Pasaule "));
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 (" Sveiki "," Sveiki \\ 0 pasaule ", 5) =>% d \ n", strncmp ("Sveiki", "Sveiki \ 0 pasaule", 5));
17. printf ("strncmp (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaule ", 8) =>% d \ n", strncmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki \ 0 Pasaule ", 8));
18. printf ("strncmp (" Sveika pasaule "," sveika pasaule ", 5) =>% d \ n", strncmp ("Sveika pasaule", "sveika pasaule", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" Sveiki "," Sveiki \\ 0 pasaule ") =>% d \ n", strcasecmp ("Sveiki", "Sveiki \ 0 pasaule"));
24. printf ("strcasecmp (" Sveika pasaule "," sveika pasaule ") =>% d \ n", strcasecmp ("Sveika pasaule", "sveika pasaule"));
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 (" Sveiki "," Sveiki \\ 0 pasaule ", 5) =>% d \ n", strncasecmp ("Sveiki", "Sveiki \ 0 pasaule", 5));
30. printf ("strncasecmp (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaule ", 8) =>% d \ n", strncasecmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki \ 0 Pasaule ", 8));
31. printf ("strncasecmp (" Sveika pasaule "," sveika pasaule ", 5) =>% d \ n", strncasecmp ("Sveika pasaule", "sveika pasaule", 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 (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaule ", 8) =>% d \ n", memcmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki \ 0 Pasaule ", 8));
37. printf ("memcmp (" Sveika pasaule "," sveika pasaule ", 11) =>% d \ n", memcmp ("Sveika pasaule", "sveika pasaule", 11));
38.
39. atgriešanās 0; 40.

Secinājums:

Tātad šajā apmācībā mēs esam redzējuši, kā virknes var dažādi salīdzināt. Kā redzējām, funkcija stringCompare () nevienādām virknēm atgriež -1, taču to var modificēt tā, lai tā atgrieztu neatbilstošās rakstzīmes ASCII vērtību. Jūs to varat izmantot savā kodā, kas jums ir vispiemērotākais.

Kontrolējiet un pārvaldiet peles kustību starp vairākiem monitoriem sistēmā Windows 10
Dual Display Mouse Manager ļauj kontrolēt un konfigurēt peles kustību starp vairākiem monitoriem, palēninot tās kustību robežas tuvumā. Windows 10/8 ļ...
WinMouse ļauj jums pielāgot un uzlabot peles rādītāja kustību Windows datorā
Ja vēlaties uzlabot peles rādītāja noklusējuma funkcijas, izmantojiet bezmaksas programmatūru WinMouse. Tas pievieno vairāk funkciju, kas palīdzēs jum...
Peles kreisā klikšķa poga nedarbojas operētājsistēmā Windows 10
Ja ar klēpjdatoru vai galddatoru izmantojat īpašu peli, bet nedarbojas peles kreisās klikšķa poga kādu iemeslu dēļ operētājsistēmā Windows 10/8/7 šeit...