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

String Comparison C Programming



Virkne C valodā ir rakstzīmju masīvs, kas beidzas ar nulles rakstzīmi ( 0). Izmantojot šo rekvizītu, tiek salīdzinātas virknes.







Divas virknes var salīdzināt dažādos veidos. Šajā apmācībā, pirmkārt, mēs redzēsim lietotāja definētu funkciju divu virkņu salīdzināšanai, un pēc tam mēs 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.



Virkņu salīdzinājums, izmantojot lietotāja definētu funkciju:

Mēs uzrakstīsim funkciju stringCompare () lai salīdzinātu virknes. Mēs šķērsojam virknes un salīdzinām katru virknes rakstzīmi, līdz tiek sasniegts jebkura viena vai abu vai viena neatbilstība. Ja traversa tiek sasniegta līdz abu virkņu beigām, tad virknes tiek saskaņotas; pretējā gadījumā virknes nav saskaņotas.



01./*userDefinedFunction.c*/
02.
03.#iekļaut
04.
05.intstringSalīdzināt( charstr1[ ], charstr2[ ] )
06.{
07.inti=0;
08.
09. kamēr(str1[i] ==str2[i] )
10.
piecpadsmit.
16.ja(str1[i] == ' 0' &&str2[i] == ' 0' )
17.atgriezties 0;
18.citādi
19.atgriezties -1;
divdesmit.
divdesmitviens.}
22.
2. 3.
24.intgalvenais()
25.{
26.charstr1[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(stringSalīdzināt(str1,str2) == 0)
3. 4. printf ('Stīgas ir vienādas n');
35.citādi
36. printf ('Stīgas nav vienādas n');
37.
38.atgriezties 0; 39.}





Šeit mēs šķērsojam virknes, izmantojot cilpu while un mainīgo i . Ja rakstzīmes ir vienādas abu virkņu vienā pozīcijā, vērtība i tiek palielināts par 1 (13. rinda). Ja rakstzīmes nav vienādas (09. rinda) vai mēs sasniedzam virknes beigas (11. rinda), tad cikla cilpa ir pārtraukums. Pēc cikla cikla mēs pārbaudām, vai abas virkņu pārejas ir sasniegtas līdz galam (16. rinda). Ja šķērsošana tiek sasniegta līdz abām virknēm, tad virknes ir vienādas, pretējā gadījumā nav.

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

Stīgu salīdzināšanai var izmantot šādas bibliotēkas funkcijas. Visas funkcijas ir deklarētas sadaļā virkne.h galvenes fails.



funkcija strcmp ():

Šī funkcija salīdzina divas funkcijai nodotās virknes.

Sintakse :

int strcmp (konst char *str1, konst 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ās nesaskaņotās rakstzīmes ASCII vērtība ir mazāka par otro virkni. Atgrieziet pozitīvu veselu skaitli, ja pirmās virknes pirmās nesaskaņotās rakstzīmes ASCII vērtība ir lielāka nekā otrā virkne. 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ās nesaskaņotās rakstzīmes 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 Atgriezt vērtību Skaidrojums
strcmp ( Sveika pasaule, sveika pasaule ) 0 Divas virknes ir vienādas.
strcmp ( Labdien, sveiki! World ) 0 Virknes tiek salīdzinātas līdz rakstzīmei “ 0”. Pirmā virkne pēc noklusējuma beidzas ar “ 0”, bet otrā virkne satur “ 0” rakstzīmi aiz “Sveiki”.
strcmp ( Labdien, 0 0 0 ″, sveiki! 0 Pasaule ) 0 Virknes 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 nekā otrās virknes (“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 nekā otrā virkne (“H”)

funkcija strncmp ():

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

Sintakse:

int strncmp (konst char *str1, konst char *str2, size_tn)

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 zīmes starp pirmās neatbilstošās rakstzīmes ASCII vērtību.

Piemērs Atgriezt vērtību Skaidrojums
strncmp ( Sveika pasaule, sveika pasaule, 5 ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncmp ( Labdien, Sveiki, pasaule, 5 ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncmp ( Labdien, 0 0 0 ″, sveiki! 0 Pasaule, 8 ) 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 ) Negatīvs vesels skaitlis Pirmās virknes pirmās nesaskaņotās rakstzīmes (“H”) ASCII vērtība ir mazāka nekā otrās virknes (“h”)

funkcija strcasecmp ():

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

Sintakse:

intstrcasecmp(konst char *str1, konst 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 Atgriezt vērtību Skaidrojums
strcasecmp ( Sveika pasaule, sveika pasaule ) 0 Divas virknes ir vienādas.
strcasecmp ( Labdien, sveiki! World ) 0 Virknes tiek salīdzinātas līdz rakstzīmei “ 0”. Pirmā virkne pēc noklusējuma beidzas ar “ 0”, bet otrā virkne satur “ 0” rakstzīmi aiz “Sveiki”.
strcasecmp ( Sveika pasaule, sveika pasaule ) 0 Stīgas ir reģistrjutīgs. Tātad, Hello World un hello World ir viens un tas pats.

funkcija strncasecmp ():

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

Sintakse:

intstrncasecmp(konst char *str1, konst char *str2)

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

Piemērs Atgriezt vērtību Skaidrojums
strncasecmp ( Sveika pasaule, sveika pasaule, 5 ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncasecmp ( Labdien, Sveiki, pasaule, 5 ) 0 Pirmās 5 rakstzīmes ir vienādas.
strncasecmp ( Labdien, 0 0 0 ″, sveiki! 0 Pasaule, 8 ) 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 ) 0 Stīgas ir reģistrjutīgs. Tātad, sveiki un sveiki ir viens un tas pats.

funkcija memcmp ():

Šī funkcija salīdzina divus atmiņas blokus baitos pa baitiem. Mums ir jānokārto divi rādītāji no atmiņas blokiem un salīdzināmo baitu skaita.

Sintakse:

int memcmp (konst spēkā neesošs *str1, konst spēkā neesošs *str2, size_tn)

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 neatbilstošo baitu pāri (baiti tiek interpretēti kā neparakstīti simbolu objekti, pēc tam paaugstināti par int).

Piemērs Atgriezt vērtību Skaidrojums
memcmp ( Sveika pasaule, sveika pasaule, 5 ) 0 Pirmās 5 rakstzīmes ir vienādas.
memcmp ( Labdien, 0 0 0 ″, sveiki! 0 Pasaule, 8 ) Negatīvs vesels skaitlis Pirmās 6 rakstzīmes ir vienādas, bet septītā - atšķirīga. Šeit salīdzinājums neapstājās strncmp () iegūstot rakstzīmi “ 0”.
memcmp ( Sveika pasaule, sveika pasaule, 11 ) Negatīvs vesels skaitlis Pirmās virknes pirmās nesaskaņotās rakstzīmes (“H”) ASCII vērtība ir mazāka nekā otrās virknes (“h”)

Piemērs:

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

01./*stringCompare.c*/
02.
03.#iekļaut
04.#iekļaut
05.
06.intgalvenais()
07.{
08. printf ('strcmp ('Sveika pasaule','Sveika pasaule') => %d n', strcmp ( 'Sveika pasaule','Sveika pasaule' ));
09. printf ('strcmp ('Sveiki','Sveiki\0Pasaule') => %d n', strcmp ( 'Sveiki','Sveiki 0Pasaule ' ));
10. printf ('strcmp ('Sveika pasaule','Sveika pasaule') => %d n', strcmp ( 'Sveika pasaule','Sveika pasaule' ) );
vienpadsmit. printf ('strcmp ('Sveiki\0\0\0','Sveiki\0Pasaule') => %d n', strcmp ( 'Sveiki 0 0 0','Sveiki 0Pasaule ' ));
12.
13. printf (' n--------------- n');
14.
piecpadsmit. printf ('strncmp ('Sveika pasaule','Sveika pasaule', 5) => %d n', strncmp ( 'Sveika pasaule','Sveika pasaule',5 ));
16. printf ('strncmp ('Sveiki','Sveiki\0Pasaule', 5) => %d n', strncmp ( 'Sveiki','Sveiki 0Pasaule ',5 ));
17. printf ('strncmp ('Sveiki\0\0\0','Sveiki\0Pasaule', 8) => %d n', strncmp ( 'Sveiki 0 0 0','Sveiki 0Pasaule ',8 ));
18. printf ('strncmp ('Sveika pasaule','Sveika pasaule', 5) => %d n', strncmp ( 'Sveika pasaule','Sveika pasaule',5 ));
19.
divdesmit. printf (' n--------------- n');
divdesmitviens.
22. printf ('strcasecmp ('Sveika pasaule','Sveika pasaule') => %d n',strcasecmp( 'Sveika pasaule','Sveika pasaule' ));
2. 3. printf ('strcasecmp ('Sveiki','Sveiki\0Pasaule') => %d n',strcasecmp( 'Sveiki','Sveiki 0Pasaule ' ));
24. printf ('strcasecmp ('Sveika pasaule','Sveika pasaule') => %d n',strcasecmp( 'Sveika pasaule','Sveika pasaule' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Sveika pasaule','Sveika pasaule', 5) => %d n',strncasecmp( 'Sveika pasaule','Sveika pasaule',5 ) );
29. printf ('strncasecmp ('Sveiki','Sveiki\0Pasaule', 5) => %d n',strncasecmp( 'Sveiki','Sveiki 0Pasaule ',5 ));
30. printf ('strncasecmp ('Sveiki\0\0\0','Sveiki\0Pasaule', 8) => %d n',strncasecmp( 'Sveiki 0 0 0','Sveiki 0Pasaule ',8 ));
31. printf ('strncasecmp ('Sveika pasaule','Sveika pasaule', 5) => %d n',strncasecmp( 'Sveika pasaule','Sveika pasaule',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Sveika pasaule','Sveika pasaule', 5) => %d n', memcmp ( 'Sveika pasaule','Sveika pasaule',5 ) );
36. printf ('memcmp ('Sveiki\0\0\0','Sveiki\0Pasaule', 8) => %d n', memcmp ( 'Sveiki 0 0 0','Sveiki 0Pasaule ',8 ));
37. printf ('memcmp ('Sveika pasaule','Sveika pasaule', 11) => %d n', memcmp ( 'Sveika pasaule','Sveika pasaule',vienpadsmit ));
38.
39.atgriezties 0; 40.}

Secinājums:

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