Strengesammenligning: C -programmering

String Comparison C Programming



En streng på C -sprog er en matrix af tegn, der afsluttes med et nulltegn ( 0). Ved hjælp af denne egenskab sammenlignes strenge.







To strenge kan sammenlignes på forskellige måder. I denne vejledning vil vi først se en brugerdefineret funktion til at sammenligne to strenge, og derefter vil vi se nogle indbyggede biblioteksfunktioner, som meget let kan bruges til at sammenligne to strenge. Så lad os komme i gang.



Strenge sammenligning ved hjælp af en brugerdefineret funktion:

Vi skriver en funktion stringCompare () at sammenligne strenge. Vi krydser strengene og sammenligner hvert tegn i strengen, indtil vi når slutningen af ​​en eller begge eller en uoverensstemmende findes. Hvis tværgangen nås til slutningen af ​​begge strengene, matches strengene; ellers er strengene uoverensstemmende.



01./*userDefinedFunction.c*/
02.
03.#omfatte
04.
05.intstringCompare( forkælelsestr1[ ], forkælelsestr2[ ] )
06.{
07.intjeg=0;
08.
09. mens(str1[jeg] ==str2[jeg] )
10.
femten.
16.hvis(str1[jeg] == ' 0' &&str2[jeg] == ' 0' )
17.Vend tilbage 0;
18.andet
19.Vend tilbage -1;
tyve.
enogtyve.}
22.
2. 3.
24.intvigtigste()
25.{
26.forkælelsestr1[30],str2[30];
27.
28. printf ('Indtast den første streng:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('Indtast den anden streng:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.hvis(stringCompare(str1,str2) == 0)
3. 4. printf ('Strengene er lige n');
35.andet
36. printf ('Strengene er ikke lige n');
37.
38.Vend tilbage 0; 39.}





Her krydser vi strengene ved hjælp af while loop og en variabel jeg . Når tegn er ens i den samme position for begge strenge, værdien af jeg øges med 1 (linje 13). Hvis tegn ikke er ens (linje 09), eller vi når slutningen af ​​strengen (linje 11), så er while -løkken en pause. Efter while -sløjfen kontrollerer vi, at begge streng -traversalerne er nået til enden eller ej (linje 16). Hvis traversal nås til slutningen af ​​begge strenge, så er strengene lige ellers ikke.

Strenge sammenligning ved hjælp af indbyggede biblioteksfunktioner:

Følgende biblioteksfunktioner kan bruges til strengsammenligning. Alle funktioner er angivet i streng.h header -fil.



strcmp () funktion:

Denne funktion sammenligner to strenge, der er overført til funktionen.

Syntaks :

int strcmp (konst forkælelse *str1, konst forkælelse *str2)

Returværdi: Returner 0, hvis strengene er ens. Returner et negativt heltal, hvis ASCII -værdien for det første uforlignelige tegn i den første streng er mindre end den anden streng. Returner et positivt heltal, hvis ASCII -værdien for den første umatchede karakter i den første streng er større end den anden streng. Nogle systemer returnerer forskellen på ASCII -værdien for det første uoverensstemmende tegn og nogle systemer returnerer -1, hvis ASCII -værdien for den første umatchede karakter i den første streng er mindre end den anden streng og returnerer 1, hvis ASCII -værdien for det første umatchede tegn på den første streng er større end den anden streng.

Eksempel Returværdi Forklaring
strcmp ( Hej verden, hej verden ) 0 To strenge er de samme.
strcmp ( Hej, Hej 0 Verden ) 0 Strenge sammenlignes indtil tegnet ' 0'. Den første streng ender som standard med ' 0', og den anden streng indeholder ' 0' -tegnet efter 'Hej'.
strcmp ( Hej 0 0 0 ″, Hej 0 verden ) 0 Strenge sammenlignes indtil tegnet ' 0'.
strcmp ( Hej verden, hej verden ) Negativt heltal ASCII -værdien af ​​den første umatchede karakter i den første streng ('H') er mindre end den anden streng ('h')
strcmp ( hej verden, hej verden ) Positivt heltal ASCII -værdien af ​​det første umatchede tegn i den første streng ('h') er større end den anden streng ('H')

strncmp () funktion:

Denne funktion ligner funktionen strcmp () , men her skal vi angive, hvor mange bytes der sammenlignes ved at sende et ekstra argument til funktionen.

Syntaks:

int strncmp (konst forkælelse *str1, konst forkælelse *str2, størrelse_tn)

Returværdi: Funktionen vender tilbage 0 hvis den første n tegn i de to strenge er ens; ellers returnerer det negativt eller positivt heltal afhængigt af tegnet på forskellene mellem det første mismatchede tegns ASCII -værdi.

Eksempel Returværdi Forklaring
strncmp ( Hej verden, hej verden, 5 ) 0 De første 5 tegn er de samme.
strncmp ( Hej, Hej 0 Verden, 5 ) 0 De første 5 tegn er de samme.
strncmp ( Hej 0 0 0 ″, Hej 0 verden, 8 ) 0 ' 0' er efter de første 5 tegn i begge strenge. Så sammenligningen stoppes efter 5 ikke 8.
strncmp ( Hej verden, hej verden, 5 ) Negativt heltal ASCII -værdien af ​​den første umatchede karakter i den første streng ('H') er mindre end den anden streng ('h')

strcasecmp () funktion:

Denne funktion ligner funktionen strcmp () , men her er strengene ikke store og små bogstaver.

Syntaks:

intstrcasecmp(konst forkælelse *str1, konst forkælelse *str2)

Returværdi: Samme som strcmp () , men strenge behandles som mellem store og små bogstaver .

Eksempel Returværdi Forklaring
strcasecmp ( Hej verden, hej verden ) 0 To strenge er de samme.
strcasecmp ( Hej, Hej 0 Verden ) 0 Strenge sammenlignes indtil tegnet ' 0'. Den første streng ender som standard med ' 0', og den anden streng indeholder ' 0' -tegnet efter 'Hej'.
strcasecmp ( Hej verden, hej verden ) 0 Strenge er mellem store og små bogstaver. Så Hej Verden og Hej Verden er det samme.

strncasecmp () funktion:

Denne funktion ligner funktionen strncmp () , men her er strengene ikke store og små bogstaver.

Syntaks:

intstrncasecmp(konst forkælelse *str1, konst forkælelse *str2)

Returværdi: Samme som strncmp () , når strenge behandles som store og små bogstaver.

Eksempel Returværdi Forklaring
strncasecmp ( Hej verden, hej verden, 5 ) 0 De første 5 tegn er de samme.
strncasecmp ( Hej, Hej 0 Verden, 5 ) 0 De første 5 tegn er de samme.
strncasecmp ( Hej 0 0 0 ″, Hej 0 verden, 8 ) 0 ' 0' er efter de første 5 tegn i begge strenge. Så sammenligningen stoppes efter 5 ikke 8.
strncasecmp ( Hej verden, hej verden, 5 ) 0 Strenge er mellem store og små bogstaver. Så hej og hej er det samme.

memcmp () funktion:

Denne funktion sammenligner to hukommelsesblokke byte for byte. Vi skal videregive to pointer til hukommelsesblokkene og antallet af bytes, der skal sammenlignes.

Syntaks:

int memcmp (konst ugyldig *str1, konst ugyldig *str2, størrelse_tn)

Returværdi: Funktionen returnerer 0, hvis de to hukommelse blokerer ( n bytes) er ens; ellers returnerer det forskellene mellem det første parparter, der ikke matcher hinanden (bytes fortolkes som ikke -signerede char -objekter og derefter forfremmet til int).

Eksempel Returværdi Forklaring
memcmp ( Hej verden, hej verden, 5 ) 0 De første 5 tegn er de samme.
memcmp ( Hej 0 0 0 ″, Hej 0 verden, 8 ) Negativt heltal De første 6 tegn er de samme, men det syvende tegn er anderledes. Her stoppede sammenligningen ikke som strncmp () når du får ' 0' tegn.
memcmp ( Hej verden, hej verden, 11 ) Negativt heltal ASCII -værdien af ​​den første umatchede karakter i den første streng ('H') er mindre end den anden streng ('h')

Eksempel:

Følgende er C -kodeeksemplet på alle de diskuterede funktioner.

01./*stringCompare.c*/
02.
03.#omfatte
04.#omfatte
05.
06.intvigtigste()
07.{
08. printf ('strcmp ('Hej Verden','Hej Verden') => %d n', strcmp ( 'Hej Verden','Hej Verden' ));
09. printf ('strcmp ('Hej','Hej\0Verden') => %d n', strcmp ( 'Hej','Hej 0Verden' ));
10. printf ('strcmp ('Hej Verden','Hej Verden') => %d n', strcmp ( 'Hej Verden','Hej Verden' ) );
elleve. printf ('strcmp ('Hej\0\0\0','Hej\0Verden') => %d n', strcmp ( 'Hej 0 0 0','Hej 0Verden' ));
12.
13. printf (' n--------------- n');
14.
femten. printf ('strncmp ('Hej Verden','Hej Verden', 5) => %d n', strncmp ( 'Hej Verden','Hej Verden',5 ));
16. printf ('strncmp ('Hej','Hej\0Verden', 5) => %d n', strncmp ( 'Hej','Hej 0Verden',5 ));
17. printf ('strncmp ('Hej\0\0\0','Hej\0Verden', 8) => %d n', strncmp ( 'Hej 0 0 0','Hej 0Verden',8 ));
18. printf ('strncmp ('Hej Verden','Hej Verden', 5) => %d n', strncmp ( 'Hej Verden','Hej Verden',5 ));
19.
tyve. printf (' n--------------- n');
enogtyve.
22. printf ('strcasecmp ('Hej Verden','Hej Verden') => %d n',strcasecmp( 'Hej Verden','Hej Verden' ));
2. 3. printf ('strcasecmp ('Hej','Hej\0Verden') => %d n',strcasecmp( 'Hej','Hej 0Verden' ));
24. printf ('strcasecmp ('Hej Verden','Hej Verden') => %d n',strcasecmp( 'Hej Verden','Hej Verden' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Hej Verden','Hej Verden', 5) => %d n',strncasecmp( 'Hej Verden','Hej Verden',5 ) );
29. printf ('strncasecmp ('Hej','Hej\0Verden', 5) => %d n',strncasecmp( 'Hej','Hej 0Verden',5 ));
30. printf ('strncasecmp ('Hej\0\0\0','Hej\0Verden', 8) => %d n',strncasecmp( 'Hej 0 0 0','Hej 0Verden',8 ));
31. printf ('strncasecmp ('Hej Verden','Hej Verden', 5) => %d n',strncasecmp( 'Hej Verden','Hej Verden',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Hej Verden','Hej Verden', 5) => %d n', memcmp ( 'Hej Verden','Hej Verden',5 ) );
36. printf ('memcmp ('Hej\0\0\0','Hej\0Verden', 8) => %d n', memcmp ( 'Hej 0 0 0','Hej 0Verden',8 ));
37. printf ('memcmp ('Hej Verden','Hej Verden', 11) => %d n', memcmp ( 'Hej Verden','Hej Verden',elleve ));
38.
39.Vend tilbage 0; 40.}

Konklusion:

Så i denne vejledning har vi set, hvordan strenge kan sammenlignes på forskellige måder. Som vi har set, returnerer funktionen stringCompare () -1 for ulige strenge, men dette kan ændres, så det returnerer ASCII -værdien af ​​et ikke -tilpasset tegn. Du kan bruge den i din kode, som er bedst egnet til dig.