Поређење стрингова: Ц програмирање

String Comparison C Programming



Низ на језику Ц је низ знакова који се завршава нултим знаком ( 0). Користећи ово својство низови се упоређују.







Два низа се могу упоредити на различите начине. У овом водичу ћемо прво видети кориснички дефинисану функцију за поређење два низа, а затим ћемо видети неке уграђене функције библиотеке које се могу користити за лако поређење два низа. Дакле, почнимо.



Поређење низа помоћу функције коју дефинише корисник:

Написаћемо функцију стрингЦомпаре () да упоредимо жице. Прелазимо низове и упоређујемо сваки знак низа док не дођемо до краја било ког или се пронађу оба или једно неусклађено. Ако је прелазак постигнут до краја оба низа, тада се низови подударају; у супротном, низови се не подударају.



01./*усерДефинедФунцтион.ц*/
02.
03.#инцлуде
04.
05.интстрингЦомпаре( цхарстр1[ ], цхарстр2[ ] )
06.{
07.инти=0;
08.
09. док(стр1[и] ==стр2[и] )
10.
петнаест.
16.ако(стр1[и] == ' 0' &&стр2[и] == ' 0' )
17.повратак 0;
18.елсе
19.повратак -1;
двадесет.
двадесет један.}
22.
2. 3.
24.интглавни()
25.{
26.цхарстр1[30],стр2[30];
27.
28. принтф ('Унесите први низ:');
29. сцанф ('% [^ н]% * ц ',стр1);
30. принтф ('Унесите други низ:');
31. сцанф ('% [^ н]% * ц ',стр2);
32.
33.ако(стрингЦомпаре(стр1,стр2) == 0)
3. 4. принтф ('Жице су једнаке н');
35.елсе
36. принтф ('Жице нису једнаке н');
37.
38.повратак 0; 39.}





Овде прелазимо низове користећи вхиле петљу и променљиву и . Када су знакови једнаки у истом положају оба низа, вредност и увећава се за 1 (ред 13). Ако знакови нису једнаки (ред 09) или дођемо до краја низа (ред 11), онда је лооп петља. Након вхиле петље, проверавамо да ли су оба преласка низа постигнута до краја или не (ред 16). Ако је прелазак постигнут до краја оба низа, тада су низови једнаки, у супротном нису.

Поређење стрингова помоћу уграђених функција библиотеке:

Следеће библиотечке функције могу се користити за поређење низа. Све функције су декларисане у стринг.х заглавна датотека.



функција стрцмп ():

Ова функција упоређује два низа пренесена у функцију.

Синтакса :

инт стрцмп (цонст цхар *стр1, цонст цхар *стр2)

Повратна вредност: Врати 0 ако су низови једнаки. Врати негативан цео број ако је АСЦИИ вредност првог неупоредивог карактера првог низа мања од другог низа. Врати позитиван цео број ако је АСЦИИ вредност првог неупоредивог карактера првог низа већа од другог низа. Неки системи враћају разлику АСЦИИ вредности првог неусклађеног знака, а неки системи враћају -1 ако је АСЦИИ вредност првог неупоредивог карактера првог низа мања од другог низа и враћају 1 ако је АСЦИИ вредност првог неупареног карактера први низ је већи од другог низа.

Пример Повратна вредност Објашњење
стрцмп ( Хелло Ворлд, Хелло Ворлд ) 0 Две жице су исте.
стрцмп ( Здраво, Здраво 0 Свет ) 0 Низови се упоређују до карактера „ 0“. Први низ подразумевано завршава са „ 0“, а други низ садржи знак „ 0“ после „Здраво“.
стрцмп ( Здраво 0 0 0 ″, Здраво 0 Свет ) 0 Низови се упоређују до карактера „ 0“.
стрцмп ( Здраво свете, здраво свете ) Негативан цео број АСЦИИ вредност првог неупоредивог карактера првог низа („Х“) је мања од другог низа („х“)
стрцмп ( здраво свете, здраво свете ) Позитиван цео број АСЦИИ вредност првог неупоредивог карактера првог низа („х“) већа је од другог низа („Х“)

функција стрнцмп ():

Ова функција је слична функцији стрцмп () , али овде морамо да наведемо колико се бајтова упоређује преношењем додатног аргумента функцији.

Синтакса:

инт стрнцмп (цонст цхар *стр1, цонст цхар *стр2, сизе_тн)

Повратна вредност: Функција се враћа 0 ако је први н знакови два низа су једнаки; у супротном, враћа негативан или позитиван цео број у зависности од предзнака разлика између АСЦИИ вредности првог неусклађеног знака.

Пример Повратна вредност Објашњење
стрнцмп ( Хелло Ворлд, Хелло Ворлд, 5 ) 0 Првих 5 знакова је исто.
стрнцмп ( Здраво, Здраво 0 Свет, 5 ) 0 Првих 5 знакова је исто.
стрнцмп ( Здраво 0 0 0 ″, Здраво 0 Свет, 8 ) 0 „ 0“ је после првих 5 знакова у оба низа. Дакле, поређење се зауставља након 5, а не 8.
стрнцмп ( Здраво свете, здраво свете, 5 ) Негативан цео број АСЦИИ вредност првог неупоредивог карактера првог низа („Х“) је мања од другог низа („х“)

функција стрцасецмп ():

Ова функција је слична функцији стрцмп () , али овде стрингови не разликују велика и мала слова.

Синтакса:

интстрцасецмп(цонст цхар *стр1, цонст цхар *стр2)

Повратна вредност: Исто као стрцмп () , али се низови третирају као неосетљив случај .

Пример Повратна вредност Објашњење
стрцасецмп ( Хелло Ворлд, Хелло Ворлд ) 0 Две жице су исте.
стрцасецмп ( Здраво, Здраво 0 Свет ) 0 Низови се упоређују до карактера „ 0“. Први низ подразумевано завршава са „ 0“, а други низ садржи знак „ 0“ после „Здраво“.
стрцасецмп ( Здраво свете, здраво свете ) 0 Гудачи су неосетљив случај. Дакле, Хелло Ворлд и хелло Ворлд су исти.

функција стрнцасецмп ():

Ова функција је слична функцији стрнцмп () , али овде стрингови не разликују велика и мала слова.

Синтакса:

интстрнцасецмп(цонст цхар *стр1, цонст цхар *стр2)

Повратна вредност: Исто као стрнцмп () , када се низови третирају као осетљиви на велика и мала слова.

Пример Повратна вредност Објашњење
стрнцасецмп ( Хелло Ворлд, Хелло Ворлд, 5 ) 0 Првих 5 знакова је исто.
стрнцасецмп ( Здраво, Здраво 0 Свет, 5 ) 0 Првих 5 знакова је исто.
стрнцасецмп ( Здраво 0 0 0 ″, Здраво 0 Свет, 8 ) 0 „ 0“ је после првих 5 знакова у оба низа. Дакле, поређење се зауставља након 5, а не 8.
стрнцасецмп ( Здраво свете, здраво свете, 5 ) 0 Гудачи су неосетљив случај. Дакле, Хелло и хелло су исти.

мемцмп () функција:

Ова функција упоређује два меморијска блока по бајт. Морамо да пренесемо два показивача меморијских блокова и број бајтова за упоређивање.

Синтакса:

инт мемцмп (цонст празнина *стр1, цонст празнина *стр2, сизе_тн)

Повратна вредност: Функција враћа 0 ако два меморијска блока ( н бајтови) су једнаки; у супротном, враћа разлике између првог неусклађеног пара бајтова (бајтови се тумаче као непотписани цхар објекти, а затим се унапређују у инт).

Пример Повратна вредност Објашњење
мемцмп ( Хелло Ворлд, Хелло Ворлд, 5 ) 0 Првих 5 знакова је исто.
мемцмп ( Здраво 0 0 0 ″, Здраво 0 Свет, 8 ) Негативан цео број Првих 6 знакова је исто, али седми знак је различит. Овде поређење није престало стрнцмп () када добијете знак „ 0“.
мемцмп ( Здраво свете, здраво свете, 11 ) Негативан цео број АСЦИИ вредност првог неупоредивог карактера првог низа („Х“) је мања од другог низа („х“)

Пример:

Следи пример Ц кода свих функција о којима се расправља.

01./*стрингЦомпаре.ц*/
02.
03.#инцлуде
04.#инцлуде
05.
06.интглавни()
07.{
08. принтф ('стрцмп ('Здраво Свете','Здраво Свете') => %д н', стрцмп ( 'Здраво Свете','Здраво Свете' ));
09. принтф ('стрцмп ('Здраво','Здраво\0Ворлд') => %д н', стрцмп ( 'Здраво','Здраво 0Свет ' ));
10. принтф ('стрцмп ('Здраво Свете','Здраво Свете') => %д н', стрцмп ( 'Здраво Свете','Здраво Свете' ) );
Једанаест. принтф ('стрцмп ('Здраво\0\0\0','Здраво\0Ворлд') => %д н', стрцмп ( 'Здраво 0 0 0','Здраво 0Свет ' ));
12.
13. принтф (' н--------------- н');
14.
петнаест. принтф ('стрнцмп ('Здраво Свете','Здраво Свете', 5) => %д н', стрнцмп ( 'Здраво Свете','Здраво Свете',5 ));
16. принтф ('стрнцмп ('Здраво','Здраво\0Ворлд', 5) => %д н', стрнцмп ( 'Здраво','Здраво 0Свет ',5 ));
17. принтф ('стрнцмп ('Здраво\0\0\0','Здраво\0Ворлд', 8) => %д н', стрнцмп ( 'Здраво 0 0 0','Здраво 0Свет ',8 ));
18. принтф ('стрнцмп ('Здраво Свете','Здраво Свете', 5) => %д н', стрнцмп ( 'Здраво Свете','Здраво Свете',5 ));
19.
двадесет. принтф (' н--------------- н');
двадесет један.
22. принтф ('стрцасецмп ('Здраво Свете','Здраво Свете') => %д н',стрцасецмп( 'Здраво Свете','Здраво Свете' ));
2. 3. принтф ('стрцасецмп ('Здраво','Здраво\0Ворлд') => %д н',стрцасецмп( 'Здраво','Здраво 0Свет ' ));
24. принтф ('стрцасецмп ('Здраво Свете','Здраво Свете') => %д н',стрцасецмп( 'Здраво Свете','Здраво Свете' ));
25.
26. принтф (' н--------------- н');
27.
28. принтф ('стрнцасецмп ('Здраво Свете','Здраво Свете', 5) => %д н',стрнцасецмп( 'Здраво Свете','Здраво Свете',5 ) );
29. принтф ('стрнцасецмп ('Здраво','Здраво\0Ворлд', 5) => %д н',стрнцасецмп( 'Здраво','Здраво 0Свет ',5 ));
30. принтф ('стрнцасецмп ('Здраво\0\0\0','Здраво\0Ворлд', 8) => %д н',стрнцасецмп( 'Здраво 0 0 0','Здраво 0Свет ',8 ));
31. принтф ('стрнцасецмп ('Здраво Свете','Здраво Свете', 5) => %д н',стрнцасецмп( 'Здраво Свете','Здраво Свете',5 ));
32.
33. принтф (' н--------------- н');
3. 4.
35. принтф ('мемцмп ('Здраво Свете','Здраво Свете', 5) => %д н', мемцмп ( 'Здраво Свете','Здраво Свете',5 ) );
36. принтф ('мемцмп ('Здраво\0\0\0','Здраво\0Ворлд', 8) => %д н', мемцмп ( 'Здраво 0 0 0','Здраво 0Свет ',8 ));
37. принтф ('мемцмп ('Здраво Свете','Здраво Свете', 11) => %д н', мемцмп ( 'Здраво Свете','Здраво Свете',Једанаест ));
38.
39.повратак 0; 40.}

Закључак:

Дакле, у овом водичу смо видели како се низови могу упоредити на различите начине. Као што смо видели, функција стрингЦомпаре () враћа -1 за неједнаке низове, али се то може изменити тако да враћа АСЦИИ вредност неусклађеног карактера. Можете га користити у свом коду, који вам највише одговара.