C Programmeren

Snaarvergelijking C Programmeren

Snaarvergelijking C Programmeren
Een tekenreeks in C-taal is een reeks tekens, die wordt afgesloten met een null-teken (\0). 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() strings vergelijken. We doorkruisen de tekenreeksen en vergelijken elk teken van de tekenreeks totdat we het einde van een of beide of een niet-overeenkomende worden 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. /*door gebruiker gedefinieerde functie.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. breken;
13. i++;
14.
15.
16. if( str1[i] == '\0' && str2[i] == '\0' )
17. retourneer 0;
18. anders
19. retourneer -1;
20.
21.
22.
23.
24. int hoofd()
25.
26. char str1[30],str2[30];
27.
28. printf("Vul de eerste string in: ");
29. scanf("%[^\n]%*c",str1);
30. printf("Vul de tweede string in: ");
31. scanf("%[^\n]%*c",str2);
32.
33. if(stringCompare(str1,str2) == 0)
34. printf("De strings zijn gelijk \n");
35. anders
36. printf("De strings zijn niet gelijk \n");
37.
38. retourneer 0; 39.

Hier doorlopen we de strings met behulp van while-lus en een variabele ik. Wanneer karakters gelijk zijn in dezelfde positie van beide strings, is de waarde van ik 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 draad.h header-bestand.

strcmp() functie:

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

Syntaxis:

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

Winstwaarde: Retourneer 0 als de strings 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\0 Wereld" ) 0 Strings worden vergeleken tot het teken '\0'. De eerste tekenreeks eindigt standaard met '\0' en de tweede tekenreeks bevat het teken '\0' na 'Hallo'.
strcmp( "Hallo\0\0\0", "Hallo\0 Wereld" ) 0 Strings worden vergeleken tot het teken '\0'.
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 door te geven aan de functie.

Syntaxis:

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

Winstwaarde: De functie retourneert 0 als de eerste nee 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 Eerste 5 tekens zijn hetzelfde.
strncmp( "Hallo", "Hallo\0 Wereld", 5 ) 0 Eerste 5 tekens zijn hetzelfde.
strncmp( "Hallo\0\0\0", "Hallo\0 Wereld",8 ) 0 '\0' staat na de eerste 5 tekens in beide strings. Dus de vergelijking wordt gestopt na 5 niet 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:

int strcasecmp(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\0 Wereld" ) 0 Strings worden vergeleken tot het teken '\0'. De eerste tekenreeks eindigt standaard met '\0' en de tweede tekenreeks bevat het teken '\0' na 'Hallo'.
strcasecmp( "Hallo wereld", "hallo wereld" ) 0 Snaren zijn hoofdlettergevoelig. Dus "Hallo Wereld" en "Hallo Wereld" zijn hetzelfde.

strncasecmp() functie:

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

Syntaxis:

int strncasecmp(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 Eerste 5 tekens zijn hetzelfde.
strncasecmp( "Hallo", "Hallo\0 Wereld", 5 ) 0 Eerste 5 tekens zijn hetzelfde.
strncasecmp( "Hallo\0\0\0", "Hallo\0 Wereld",8 ) 0 '\0' staat na de eerste 5 tekens in beide strings. Dus de vergelijking wordt gestopt na 5 niet 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 doorgeven en het aantal te vergelijken bytes.

Syntaxis:

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

Winstwaarde: De functie retourneert 0 als de twee geheugenblokken (nee 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 Eerste 5 tekens zijn hetzelfde.
memmp( "Hallo\0\0\0", "Hallo\0 Wereld",8 ) Negatief geheel getal De eerste 6 tekens zijn hetzelfde, maar het 7e teken is anders. Hier is de vergelijking niet gestopt zoals strncmp() bij het krijgen van '\0'-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. /*stringVergelijken.c*/
02.
03. #include
04. #include
05.
06. int hoofd()
07.
08. printf("strcmp( "Hallo wereld","Hallo wereld" ) => %d\n",strcmp( "Hallo wereld","Hallo wereld" ));
09. printf("strcmp( "Hallo","Hallo\\0 Wereld" ) => %d\n",strcmp( "Hallo","Hallo\0 Wereld" ));
10. printf("strcmp( "Hallo wereld","hallo wereld" ) => %d\n",strcmp( "Hallo wereld","hallo wereld" ) );
11. printf("strcmp( "Hallo\\0\\0\\0","Hallo\\0 Wereld" ) => %d\n",strcmp( "Hallo\0\0\0","Hallo\0 wereld" ));
12.
13. printf("\n---------------\n");
14.
15. printf("strncmp( "Hallo wereld","Hallo wereld",5 ) => %d\n",strncmp( "Hallo wereld","Hallo wereld",5 ));
16. printf("strncmp( "Hallo","Hallo\\0 Wereld",5 ) => %d\n",strncmp( "Hallo","Hallo\0 Wereld",5 ));
17. printf("strncmp( "Hallo\\0\\0\\0","Hallo\\0 Wereld",8 ) => %d\n",strncmp( "Hallo\0\0\0","Hallo \0 Wereld",8 ));
18. printf("strncmp( "Hallo wereld","hallo wereld",5 ) => %d\n",strncmp( "Hallo wereld","hallo wereld",5 ));
19.
20. printf("\n---------------\n");
21.
22. printf("strcasecmp( "Hallo wereld","Hallo wereld" ) => %d\n",strcasecmp( "Hallo wereld","Hallo wereld" ));
23. printf("strcasecmp( "Hallo","Hallo\\0 Wereld" ) => %d\n",strcasecmp( "Hallo","Hallo\0 Wereld" ));
24. printf("strcasecmp( "Hallo wereld","hallo wereld" ) => %d\n",strcasecmp( "Hallo wereld","hallo wereld" ));
25.
26. printf("\n---------------\n");
27.
28. printf("strncasecmp( "Hallo wereld","Hallo wereld",5 ) => %d\n",strncasecmp( "Hallo wereld","Hallo wereld",5 ) );
29. printf("strncasecmp( "Hallo","Hallo\\0 Wereld",5 ) => %d\n",strncasecmp( "Hallo","Hallo\0 Wereld",5 ));
30. printf("strncasecmp( "Hallo\\0\\0\\0","Hallo\\0 Wereld",8 ) => %d\n",strncasecmp( "Hallo\0\0\0","Hallo \0 Wereld",8 ));
31. printf("strncasecmp( "Hallo wereld","hallo wereld",5 ) => %d\n",strncasecmp( "Hallo wereld","hallo wereld",5 ));
32.
33. printf("\n---------------\n");
34.
35. printf("memcmp( "Hallo wereld","Hallo wereld",5 ) => %d\n",memcmp( "Hallo wereld","Hallo wereld",5 ) );
36. printf("memcmp( "Hallo\\0\\0\\0","Hallo\\0 Wereld",8 ) => %d\n",memcmp( "Hallo\0\0\0","Hallo \0 Wereld",8 ));
37. printf("memcmp( "Hallo wereld","hallo wereld",11 ) => %d\n",memcmp( "Hallo wereld","hallo wereld",11 ));
38.
39. retourneer 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. Je kunt het gebruiken in je code, die het meest geschikt is voor jou.

Voeg muisbewegingen toe aan Windows 10 met deze gratis tools
In de afgelopen jaren zijn computers en besturingssystemen sterk geëvolueerd. Er was een tijd dat gebruikers opdrachten moesten gebruiken om door best...
Beheer en beheer muisbewegingen tussen meerdere monitoren in Windows 10
Muisbeheer voor twee schermen laat je muisbewegingen tussen meerdere monitoren controleren en configureren door de bewegingen nabij de grens te vertra...
Met WinMouse kunt u de beweging van de muisaanwijzer op Windows-pc aanpassen en verbeteren
Als u de standaardfuncties van uw muisaanwijzer wilt verbeteren, gebruik dan freeware WinMuis. Het voegt meer functies toe om u te helpen het meeste u...