Лабораторна робота № 23. Порівняння символів та рядків

Мета:

Здобути навики використання середовища розробки мови C++, познайомитися з порівнянням символів та рядків, здобути навички написання програм.

Короткі теоретичні відомості до роботи.

Дещо відособлено при обробці рядків стоїть порівняння рядків та символів. У функції-підпрограмі tarabar порівнювалися символи по принципу ідентичності (дорівнює чи не дорівнює). Розглянемо інші можливості.

Маніпуляції з рядками та символами всередині комп’ютера здійснюється за їх кодами, тому технічно порівнюються не самі символи, а їх коди.

Коди символів букв упорядковані за алфавітом, що завжди вірно для кирилиці, так як для неї виведені стандарти (ASCII та EBCDIC). До кирилиці це, до жалю, не відноситься і у кожному випадку впорядкованість кодів можна перевірити. Виявлення колів здійснюється прямим перетворенням типів (int)char.

У наступній програмі виводяться коди латиниці та кирилиці (з використанням масиву alphabet із tarabar. Для латиниці комп’ютер використовує стандарт ASCII. Коди кирилиці різні для DOS і Win. В обох випадках коди кирилиці – від’ємні числа, упорядковані, крім букви Ёё, в алфавітному порядку, чим і будемо користуватися у подальшому. При русифікації під Win на екрані не виводиться рядкова буква я.

//файл PART3\3_12.ccp

// порівняння рядків та символів

#include<string.h> //функції обробки рядків

#include “c:\CPP\SUBPROG\\roll.h”

#include “c:\CPP\SUBPROG\\roll_txt.h”

typedef char STRING;

#include <iomanip.h> //маніпулятори

main () { clrscr();

cout<<”\n КОДИ ЛІТЕРАЛЬНИХ КОНСТАНТ “;

/* всього символів: 0-126, латиниця: 0-51,

знаки: 52-62, кирилиця: 63-126 */

const STRING alphabet [] =

“AaBbCcDdTtFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz!?.,

*/+-:\nАаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсЕеУуФфХхЦцЧч

ШшЩщъЫыьЭэЮюЯя”;

cout << ’\n ЛАТИНИЦЯ”<<end1;

for (i=0; i<=51; i++) {k=(int) alphabet [i];

cout<<” “<<alphabet [i]<<setw(5)<<k;

if ((i+1)%8 = 0) cout<< end1; }; cout<<end1;

pause(9);

cout << ’\n КИРИЛИЦЯ”<<end1;

for (i=63; i<=126; i++) {k=(int) alphabet [i];

{ cout<<” “<<alphabet [i]<<setw(5)<<(int) alphabet [i];

if ((i+2)%8 = 0) cout<< end1; }; pause(1);

cout << ’\nпорівняння символьних змінних”<<end1;

STRING t0[]=”idkln”; cout<<”масив to: ”<< t0;

STRING t1[]=”dkln”; cout<<”\nмасив t1: ”<< t1;

i=0; while (t0[i]!= ‘\0’)

{ if (*(t0+i)==*(t1+i))

cout<<”\nt0[“<<i<<”]<t1[“<<i<<”]”;

if (*(t0+i)<*(t1+i))

cout<<”\nt0[“<<i<<”]<t1[“<<i<<”]”;

if (*(t0+i)>*(t1+i))

cout<<”\nt0[“<<i<<”]<t1[“<<i<<”]”;

cout<<” Коди: “<<(int)(*(t0+i))<<’ ‘

<<(int)(*(t1+i)); i++; };

STRING t2[]=”гджлу”; cout<<”масив t2: ”<< t2;

STRING t3[]=”джлу”; cout<<”\nмасив t3: ”<< t3;

i=0; while (t2[i]!= ‘\0’)

{ if (*(t2+i)==*(t3+i))

cout<<”\nt2[“<<i<<”]<t3[“<<i<<”]”;

if (*(t2+i)<*(t3+i))

cout<<”\nt2[“<<i<<”]<t3[“<<i<<”]”;

if (*(t2+i)>*(t3+i))

cout<<”\nt2[“<<i<<”]<t3[“<<i<<”]”;

cout<<” Коди: “<<(int)(*(t2+i))<<’ ‘

<<(int)(*(t3+i)); i++; };

cout << ’\nмасив t0: ”<< t0;

cout << ’\nмасив t3: ”<< t3;

i=0; while (t0[i]!= ‘\0’)

{ if (*(t0+i)==*(t3+i))

cout<<”\nt0[“<<i<<”]<t3[“<<i<<”]”;

if (*(t0+i)<*(t3+i))

cout<<”\nt0[“<<i<<”]<t1[“<<i<<”]”;

if (*(t0+i)>*(t3+i))

cout<<”\nt0[“<<i<<”]<t3[“<<i<<”]”;

cout<<” Коди: “<<(int)(*(t0+i))<<’ ‘

<<(int)(*(t3+i)); i++; };

pause(1);

cout<<”\n порівняння довжини рядків”<<end1;

I=strcmp(t0, t1); cout<<t0<<’ ‘<<t1<<’ ‘<<I<<end1;

cout<<t0<<’ ‘<<t2<<’ ‘<<t1<<’ ‘<<I<<end1;

cout<<” ib bi ”<< strcmp (“ib”, “bi”)<<end1;

cout<<” bi ib ”<< strcmp (“bi”, “ib”)<<end1;

cout<<” bi bi ”<< strcmp (“bi”, “bi”)<<end1;

cout<<” Ij ij ”<< strcmp (“Ij”, “ij”)<<end1;

cout<<” ij jI ”<< strcmp (“ij ”, “jI ”)<<end1;

cout<<” KK Ki ”<< strcmp (“KK”, “Ki”)<<end1;

cout<<” Kk ki ”<< strcmp (“Kk”, “ki ”)<<end1;

cout<<” чб бч ”<< strcmp (“чб”, “бч ”)<<end1;

cout<<” бч чб ”<< strcmp (“бч”, “чб ”)<<end1;

cout<<” чб чб ”<< strcmp (“чб ”, “чб”)<<end1;

cout<<” чб ib ”<< strcmp (“чб ”, “ib”)<<end1;

cout<<”\n ***** кінець задачі *****”; pause(0);

return 0; }

У службових програмах для перекодування кириличних символів використовується взаємна заміна одноімених кириличних символів для DOS і Win. Далі у програмі здійснюється порівняння різних літеральних символів з масивів t0, t1, t2, t3.


У заголовочний файл string.h включена функція strcmp з двома аргументами-рядками, чка виконує лексографічне порівняння рядків (коли коди упорядковані у відповідності з алфавітом) і повертає нуль, коли рядки рівні, позитивне число, коли перший рядок більше, чим другий, і від’ємне число, коли перший рядок менше, чим другий. У програмі приведено декілька прикладів порівняння рядків.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: