Stringvergelijking: C-programmering

String Comparison C Programming



Een string in C-taal is een array van karakters, die wordt afgesloten met een null-teken (). Met behulp van deze eigenschap worden strings vergeleken.







Twee snaren kunnen op verschillende manieren worden vergeleken. In deze tutorial zullen we eerst een door de gebruiker gedefinieerde functie zien om twee strings te vergelijken, en dan zullen we enkele ingebouwde bibliotheekfuncties zien die kunnen worden gebruikt om twee strings heel gemakkelijk te vergelijken. Dus laten we beginnen.



Stringvergelijking met behulp van een door de gebruiker gedefinieerde functie:

We zullen een functie schrijven stringCompare() snaren vergelijken. We doorkruisen de strings en vergelijken elk karakter van de string totdat we het einde van een of beide bereiken of er een niet-overeenkomend wordt gevonden. Als de traversal wordt bereikt aan het einde van beide snaren, dan zijn de snaren op elkaar afgestemd; anders komen strings niet overeen.



01./*userDefinedFunction.c*/
02.
03.#erbij betrekken
04.
05.intstringVergelijken( charstr1[ ], charstr2[ ] )
06.{
07.intl=0;
08.
09. terwijl(str1[l] ==str2[l] )
10.
vijftien.
16.indien(str1[l] == ' 0' &&str2[l] == ' 0' )
17.opbrengst 0;
18.anders
19.opbrengst -1;
twintig.
eenentwintig.}
22.
2. 3.
24.inthoofd()
25.{
26.charstr1[30],str2[30];
27.
28. printf ('Voer de eerste string in: ');
29. scanf ('% [^N]% * C ',str1);
30. printf ('Voer de tweede string in: ');
31. scanf ('% [^N]% * C ',str2);
32.
33.indien(stringVergelijken(str1,str2) == 0)
3. 4. printf ('De snaren zijn gelijk'N');
35.anders
36. printf ('De snaren zijn niet gelijk'N');
37.
38.opbrengst 0; 39.}





Hier doorlopen we de strings met behulp van while-lus en een variabele l . Wanneer karakters gelijk zijn in dezelfde positie van beide strings, is de waarde van l wordt met 1 verhoogd (regel 13). Als tekens niet gelijk zijn (regel 09) of als we het einde van de tekenreeks bereiken (regel 11), dan is de while-lus een pauze. Na de while-lus controleren we of beide stringtraversals tot het einde zijn bereikt of niet (regel 16). Als de traversal wordt bereikt aan het einde van beide strings, dan zijn de strings gelijk, anders niet.

Stringvergelijking met behulp van ingebouwde bibliotheekfuncties:

De volgende bibliotheekfuncties kunnen worden gebruikt voor het vergelijken van strings. Alle functies worden gedeclareerd in de string.h header-bestand.



strcmp() functie:

Deze functie vergelijkt twee tekenreeksen die aan de functie zijn doorgegeven.

Syntaxis :

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

Winstwaarde: Retourneer 0 als de tekenreeksen gelijk zijn. Retourneert een negatief geheel getal als de ASCII-waarde van het eerste niet-overeenkomende teken van de eerste tekenreeks kleiner is dan de tweede tekenreeks. Retourneert een positief geheel getal als de ASCII-waarde van het eerste niet-overeenkomende teken van de eerste tekenreeks groter is dan de tweede tekenreeks. Sommige systemen retourneren verschil van de ASCII-waarde van het eerste niet-overeenkomende teken en sommige systemen retourneren -1 als de ASCII-waarde van het eerste niet-overeenkomende teken van de eerste tekenreeks kleiner is dan de tweede tekenreeks en retourneren 1 als de ASCII-waarde van het eerste niet-overeenkomende teken van de eerste string is groter dan de tweede string.

Voorbeeld Winstwaarde Uitleg
strcmp( Hallo wereld, hallo wereld ) 0 Twee snaren zijn hetzelfde.
strcmp( Hallo,Hallo Wereld ) 0 Strings worden vergeleken tot het teken ''. De eerste tekenreeks eindigt standaard met '' en de tweede tekenreeks bevat het teken '' na 'Hallo'.
strcmp( Hallo″,Hallo Wereld ) 0 Strings worden vergeleken tot het teken ''.
strcmp( Hallo wereld, hallo wereld ) Negatief geheel getal ASCII-waarde van het eerste niet-overeenkomende teken van de eerste tekenreeks ('H') is kleiner dan de tweede tekenreeks ('h')
strcmp( hallo wereld, hallo wereld ) Positief integer ASCII-waarde van het eerste niet-overeenkomende teken van de eerste tekenreeks ('h') is groter dan de tweede tekenreeks ('H')

strncmp() functie:

Deze functie is vergelijkbaar met de functie: strcmp() , maar hier moeten we specificeren hoeveel bytes worden vergeleken door een extra argument aan de functie door te geven.

Syntaxis:

int strncmp (const char *str1, const char *str2, size_tN)

Winstwaarde: De functie retourneert 0 als de eerste N karakters van de twee strings zijn gelijk; anders wordt een negatief of positief geheel getal geretourneerd, afhankelijk van het teken van de verschillen tussen de ASCII-waarde van het eerste niet-overeenkomende teken.

Voorbeeld Winstwaarde Uitleg
strncmp( Hallo wereld, hallo wereld, 5 ) 0 De eerste 5 tekens zijn hetzelfde.
strncmp( Hallo,Hallo Wereld,5 ) 0 De eerste 5 tekens zijn hetzelfde.
strncmp( Hallo″,Hallo Wereld,8 ) 0 '' staat na de eerste 5 tekens in beide tekenreeksen. De vergelijking wordt dus gestopt na 5 en niet na 8.
strncmp( Hallo wereld, hallo wereld, 5 ) Negatief geheel getal ASCII-waarde van het eerste niet-overeenkomende teken van de eerste tekenreeks ('H') is kleiner dan de tweede tekenreeks ('h')

strcasecmp() functie:

Deze functie is vergelijkbaar met de functie: strcmp() , maar hier zijn de tekenreeksen niet hoofdlettergevoelig.

Syntaxis:

intstrcasecmp(const char *str1, const char *str2)

Winstwaarde: Hetzelfde als strcmp() , maar strings worden behandeld als hoofdlettergevoelig .

Voorbeeld Winstwaarde Uitleg
strcasecmp( Hallo wereld, hallo wereld ) 0 Twee snaren zijn hetzelfde.
strcasecmp( Hallo,Hallo Wereld ) 0 Strings worden vergeleken tot het teken ''. De eerste tekenreeks eindigt standaard met '' en de tweede tekenreeks bevat het teken '' na 'Hallo'.
strcasecmp( Hallo wereld, hallo wereld ) 0 Snaren zijn hoofdlettergevoelig. Hallo wereld en hallo wereld zijn dus hetzelfde.

strncasecmp() functie:

Deze functie is vergelijkbaar met de functie: strncmp() , maar hier zijn de tekenreeksen niet hoofdlettergevoelig.

Syntaxis:

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

Winstwaarde: Hetzelfde als strncmp() , wanneer tekenreeksen worden behandeld als hoofdlettergevoelig.

Voorbeeld Winstwaarde Uitleg
strncasecmp( Hallo wereld, hallo wereld, 5 ) 0 De eerste 5 tekens zijn hetzelfde.
strncasecmp( Hallo,Hallo Wereld,5 ) 0 De eerste 5 tekens zijn hetzelfde.
strncasecmp( Hallo″,Hallo Wereld,8 ) 0 '' staat na de eerste 5 tekens in beide tekenreeksen. De vergelijking wordt dus gestopt na 5 en niet na 8.
strncasecmp( Hallo wereld, hallo wereld, 5 ) 0 Snaren zijn hoofdlettergevoelig. Dus hallo en hallo zijn hetzelfde.

memcmp() functie:

Deze functie vergelijkt twee geheugenblokken byte voor byte. We moeten twee wijzers van de geheugenblokken en het aantal te vergelijken bytes doorgeven.

Syntaxis:

int memcmp (const leegte *str1, const leegte *str2, size_tN)

Winstwaarde: De functie retourneert 0 als de twee geheugenblokken ( N bytes) zijn gelijk; anders retourneert het de verschillen tussen het eerste niet-overeenkomende paar bytes (bytes worden geïnterpreteerd als niet-ondertekende char-objecten en vervolgens gepromoveerd tot int).

Voorbeeld Winstwaarde Uitleg
memmp( Hallo wereld, hallo wereld, 5 ) 0 De eerste 5 tekens zijn hetzelfde.
memmp( Hallo″,Hallo Wereld,8 ) Negatief geheel getal De eerste 6 karakters zijn hetzelfde, maar het 7e karakter is anders. Hier is de vergelijking niet gestopt zoals strncmp() bij het krijgen van een ''-teken.
memmp( Hallo wereld, hallo wereld, 11 ) Negatief geheel getal ASCII-waarde van het eerste niet-overeenkomende teken van de eerste tekenreeks ('H') is kleiner dan de tweede tekenreeks ('h')

Voorbeeld:

Hieronder volgt het C-codevoorbeeld van alle besproken functies.

01./*stringCompare.c*/
02.
03.#erbij betrekken
04.#erbij betrekken
05.
06.inthoofd()
07.{
08. printf ('strcmp('Hallo Wereld','Hallo Wereld' ) => %dN', strcmp ( 'Hallo Wereld','Hallo Wereld' ));
09. printf ('strcmp('Hallo','Hallo\0Wereld' ) => %dN', strcmp ( 'Hallo','Hallo 0Wereld' ));
10. printf ('strcmp('Hallo Wereld','Hallo Wereld' ) => %dN', strcmp ( 'Hallo Wereld','Hallo Wereld' ) );
elf. printf ('strcmp('Hallo\0\0\0','Hallo\0Wereld' ) => %dN', strcmp ( 'Hallo 0 0 0','Hallo 0Wereld' ));
12.
13. printf ('N---------------N');
14.
vijftien. printf ('strncmp('Hallo Wereld','Hallo Wereld',5 ) => %dN', strncmp ( 'Hallo Wereld','Hallo Wereld',5 ));
16. printf ('strncmp('Hallo','Hallo\0Wereld',5 ) => %dN', strncmp ( 'Hallo','Hallo 0Wereld',5 ));
17. printf ('strncmp('Hallo\0\0\0','Hallo\0Wereld',8 ) => %dN', strncmp ( 'Hallo 0 0 0','Hallo 0Wereld',8 ));
18. printf ('strncmp('Hallo Wereld','Hallo Wereld',5 ) => %dN', strncmp ( 'Hallo Wereld','Hallo Wereld',5 ));
19.
twintig. printf ('N---------------N');
eenentwintig.
22. printf ('strcasecmp('Hallo Wereld','Hallo Wereld' ) => %dN',strcasecmp( 'Hallo Wereld','Hallo Wereld' ));
2. 3. printf ('strcasecmp('Hallo','Hallo\0Wereld' ) => %dN',strcasecmp( 'Hallo','Hallo 0Wereld' ));
24. printf ('strcasecmp('Hallo Wereld','Hallo Wereld' ) => %dN',strcasecmp( 'Hallo Wereld','Hallo Wereld' ));
25.
26. printf ('N---------------N');
27.
28. printf ('strncasecmp('Hallo Wereld','Hallo Wereld',5 ) => %dN',strncasecmp( 'Hallo Wereld','Hallo Wereld',5 ) );
29. printf ('strncasecmp('Hallo','Hallo\0Wereld',5 ) => %dN',strncasecmp( 'Hallo','Hallo 0Wereld',5 ));
30. printf ('strncasecmp('Hallo\0\0\0','Hallo\0Wereld',8 ) => %dN',strncasecmp( 'Hallo 0 0 0','Hallo 0Wereld',8 ));
31. printf ('strncasecmp('Hallo Wereld','Hallo Wereld',5 ) => %dN',strncasecmp( 'Hallo Wereld','Hallo Wereld',5 ));
32.
33. printf ('N---------------N');
3. 4.
35. printf ('memmp('Hallo Wereld','Hallo Wereld',5 ) => %dN', memcmp ( 'Hallo Wereld','Hallo Wereld',5 ) );
36. printf ('memmp('Hallo\0\0\0','Hallo\0Wereld',8 ) => %dN', memcmp ( 'Hallo 0 0 0','Hallo 0Wereld',8 ));
37. printf ('memmp('Hallo Wereld','Hallo Wereld',11 ) => %dN', memcmp ( 'Hallo Wereld','Hallo Wereld',elf ));
38.
39.opbrengst 0; 40.}

Conclusie:

Dus in deze tutorial hebben we gezien hoe strings op verschillende manieren kunnen worden vergeleken. Zoals we hebben gezien, retourneert de functie stringCompare() -1 voor ongelijke tekenreeksen, maar dit kan worden gewijzigd zodat het de ASCII-waarde van een niet-overeenkomend teken retourneert. U kunt het gebruiken in uw code, die het beste bij u past.