Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

9-lekciya

.pdf
Скачиваний:
3
Добавлен:
25.12.2023
Размер:
340.53 Кб
Скачать

ámeli orınlanıwında i mánisi 0 boladı, sebebi qatarlar basindaǵı 31 belgiler birdey.

strncmpi() funkciyası strncmpi() funkciyasınday orınlanadı, ózgeshe tárepi sonnan ibarat, salıstırıwda háriplerdiń registri esapqa alınbaydı. Dál usı qatarlar ushın

i=strncmpi(qatar1, qatar2, 32);

ámeli orınlanıwı nátiyjesinde i ózgeriwshi mánisi 0 boladı.

Qatardaǵı háripler registrin almastırıw

Berilgen qatardaǵı kishi háriplerdi bas háriplerge yamasa kerisinshe almastırıwǵa sáykes túrde _strupr() hám _strlwr() funkciyalar járdeminde ámelge asırıw múmkin. Kompilyatorlardıń ayrım variantlarında funkciyalar atındaǵı tómengi sızıq („_‟) bolmawı múmkin.

_strlwr() funkciyası sintaksisi

char* _strlwr(char *str);

kórinisinde bolıp, argument sıpatında berilgen qatardaǵı bas háriplerdi kishi háriplerge almastıradı hám payda bolǵan qatar adresin funkciya nátiyjesi sıpatında qaytaradı. Tómendegi programma bólegi _strlwr() funkciyasınan paydalanıwǵa mısal boladı.

char str[] = ”10 DANA ÚLKEN HÁRIPLER”;

_strlwr(str);

cout << str;

nátiyjede ekranǵa

10 dana úlken háripler

qatarı shıǵarıladı.

_strupr() funkciyası dál _strlwr() funkciyasınday orınlanadı, biraq qatardaǵı kishi háriplerdi bas háriplerge almastıradı:

char str[] = “10 dana úlken háripler”;

_strupr(str);

cout << str;

nátiyjede ekranǵa

10 DANA ÚLKEN HÁRIPLER

qatarı shıǵarıladı.

Programmalastırıw ámelıyatında belgilerdiń qaysı aralıqqa tiyisli ekenligin biliw zárúr boladı. Bunı «ctype.h» baslama faylında járiyalanǵan funkciyalar járdeminde anıqlaw múmkin. Tómende olardıń bir bóleginiń anıqlaması keltirilgen:

isalnum() – belgi, cifr yamasa hárip (true) yamasa joqlıǵın (false) anıqlaydı; isalpha() – belginiń hárip (true) yamasa joqlıǵın (false) anıqlaydı;

isascii() – belginiń kodı 0..127 aralıǵında (true) yamasa joqlıǵın (false) anıqlaydı;

isdigit() - belginiń sanlar diapazonına tiyisli (true) yamasa joqlıǵın (false) anıqlaydı.

Bul funkciyalardan paydalanıwǵa mısal keltiremiz.

#include <iostream.h> #include <ctype.h> #include <string.h> int main()

{

char qatar[5]; int qáte; do

{

qáte = 0;

cout << "\nTuwılǵan jılıńızdı kiritiń: "; cin.getline(qatar, 5); for(int i = 0; i < strlen(qatar) && !qáte; i++)

{

if(isalpha(qatar[i]))

{

cout << "Hárip kiritildi!"; qate = 1;

}

else if(iscntrl(qatar[i]))

{

cout << "Basqarıw belgisi kiritildi!"; qáte = 1;

}

else if(ispunct(qatar[i]))

{

cout << "Punktuaciya belgisi kiritildi!"; qáte = 1;

}

else if(!isdigit(qatar[i]))

{

cout << "Sannan parıqlı belgi

kiritildi!"; qáte = 1;

}

}

if(!qate)

{

cout << "Siziń tuwılǵan jılıńız: " << qatar; return 0;

}

}while (1);

}

Programmada paydalanıwshıǵa tuwılǵan jılın kiritiw usınıs etiledi. Kiritlgen sáne qatar ózgeriwshisine oqıladı hám eger qatardıń hár bir belgisi (qatar[i]) hárip yamasa basqarıw belgisi yaki punktuaciya belgisi bolsa, sol haqqında xabar beriledi hám tuwılǵan jıldı qayta kiritiw usınıs etiledi. Programma tuwılǵan jıl (tórt san) durıs kiritilgende “Siziń tuwılǵan jılıńız XXXX” qatarın shıǵarıw menen óz jumısın tamamlaydı.

Qatardı keri tártiplestiriw

Qatardı keri tártiplestiriw ushın strrev() funkciyasınan paydalanıw múmkin. Bul funkciya tómendegishe prototipke iye:

char* strrev(char *str);

Qatar reversin payda etiwge mısal:

char str[] = ”telefon”; cout << strrev(str);

ámeller orınlanıwı nátiyjesinde ekranǵa

nofelet

qatarı shıǵarıladı.

Qatarda belgini izlew funkciyası

Qatarlar menen islewde ondaǵı qandayda bir belgini izlew ushın «string.h» kitapxanasında bir qatar standart funkciyalar bar.

Qanday da bir belginiń berilgen qatarda bar yamasa joq ekenligin anıqlap beriwshi strchr() funkciyasınıń prototipi

char* strchr(const char *string, int c);

kórinisinde bolıp, ol c belgisin string qatarında izleydi. Eger izlew sátli bolsa, funkciya sol belginiń qatardaǵı ornın funkciya nátiyjesi sıpatında qaytaradı, keri jaǵdayda, yaǵnıy belgi qatarda ushıramasa funkciya NULL mánisin qaytaradı. Belgini izlew qatar basınan baslanadı.

Tómende keltirilgen programma bólegi belgini qatardan izlew menen baylanıslı.

char qatar[] = ”0123456789”;

char *pQatar;

pQatar = strchr(qatar, ’6’);

Programma islewi nátiyjesinde pQatar kórsetkishi qatar qatarınıń “6” belgisi jaylasqan ornı adresin kórsetedi.

strrchr() funkciyası berilgen belgini berilgen qatar aqırınan baslap izleydi. Eger izlew sátli bolsa, belgini qatarǵa aqırǵı kiriwiniń ornın qaytaradı, keri jaǵdayda NULL mánis qaytaradı.

Mısal ushın

char qatar[] = ”0123456789101112”;

char *pqatar;

pqatar = strrchr(qatar,’0’);

ámeller orınlanıwında pqatar kórsetkishi qatar qatarınıń “01112” qatar bóleginiń

baslanıwın kórsetedi.

strspn() funkciyası eki qatardaǵı belgilerdi salıstıradı. Funkciya tómendegishe

size_t strspn(const char *str1, const char *str2);

kórinisine iye bolıp, ol str1 qatarǵa kiriwshi qanday da bir belgini izleydi hám bunday element tabılsa, onıń indeksin funkciya mánisi sıpatında qaytaradı, keri jaǵdayda funkciya qatar uzınlıǵınan bir artıq mánisti qaytaradı. Máselen:

char qatar1[] = "0123ab6789012345678"; char qatar2[] = "a32156789012345678"; int parıqlı_belgi;

parıqli_belgi = strspn(qatar1, qatar2);

cout << "qatar1 qatarındaǵı qatar2 qatarına kirmeytuǵın\ birinshi belgi indeksi = " << parıqlı_belgi;

cout << "ham ol '" << qatar1[parıqlı_belgi] <<"' belgisi.";

ámeller orınlanıwı nátiyjesinde ekranǵa

Qatarlarǵa sáykes túspegen belgi indeksi = 5

qatarı shıǵarıladı.

strcspn() funkciyasınıń prototipi

size_t strcspn(const char *str1, const char *str2);

kórinisinde

bolıp,

ol str1 hám str2 qatarların

salıstıradı

hám str1 qatarınıń str2 qatarına

kirgen birinshi belginiń indeksin

qaytaradı.

Máselen:

 

 

 

char qatar[] = ”Birinshi qatar”; int indeks; index = strcspn(qatar, ”sanaq sisteması”);

ámelleri orınlanǵannan soń indeks ózgeriwshisi 1 mánisti qabıl etedi, sebebi birinshi qatardıń birinshi orındaǵı belgisi ekinshi qatarda ushıraydı.

strpbrk() funkciyanıń prototipi

char* strpbrk(const char *str1, const char *str2);

kóriniske iye bolıp, ol str1 qatarındaǵı str2 qatarına kiriwshi qanday da bir belgini izleydi hám eger bunday element tabılsa, onıń adresi funkciya mánisi sıpatında qaytarıladı, keri jaǵdayda funkciya NULL mánis qaytaradı. Tómendegi mısal funkciyanıń qanday islewin kórsetedi.

char qatar1[] = ”0123456789ABCDEF”;

char qatar2[] = ”ZXYabcdefABC”; char *element;

element = strpbrk(qatar1, qatar2);

cout << element << ’\n’;

Programma islewi nátiyjesinde ekranǵa str1 qatarınıń

ABCDEF

qatar astı shıǵarıladı.

Qatar bóleklerin izlew funkciyası

Qatarlar menen islewde bir qatarǵa ekinshi bir qatardıń (yamasa onıń qaysıdur bóleginiń) tolıq kiriwin anıqlaw menen baylanıslı máseleler salıstırmalı kóp ushıraydı. Máselen, tekst redaktorlarındaǵı qatardaǵı qanday da

bir qatar bólegin ekinshi qatar bólegi menen almastırıw máselesin mısal etip keltiriwimiz múmkin.

Standart «string.h» kitapxanası bul tiptegi máseleler ushın bir neshe funkciyalardı usınadı.

strstr() funkciyası tómendegishe járiyalanadı:

char *strstr(const char *str, const char *substr);

Bul

funkciya str qatarına substr qatar

bólegi

kiriwi

tekseriledi,

eger substr qatar bólegi str qatarına tolıq kiriwi bar

bolsa,

qatardıń shep

tárepininen birinshi kiriwdegi birinshi belginiń adresi juwap retinde qaytarıladı,

keri

jaǵdayda

funkciya

NULL

mánisti

qaytaradı.

Tómendegi

mısal strstr() funkciyasınıń isletiliwin kórsetedi:

 

 

char qatar[]= ”qatradan qatar astı izlenip atır, qatar asti bar”;

char qatar2[] = ”qatar astı”; char *qatar_astı;

qatar_astı = strstr(qatar1, qatar2); cout << qatar_astı <<’\n’;

Programma buyrıqları orınlanıwı nátiyjesinde ekranǵa

qatar astı izlenip atır, qatar astı bar

qatarı shıǵarıladı.

Keyingi programma bóleginde qatarda basqa bir qatar bólegi bar yamasa joq

ekenligin baqlaw jaǵdayı kórsetilgen:

char Atlar[] = ”Alisher, Farxad, Munisa, Erkin, Akmal, Nadira”;

char At[10];

char *qatardaǵı_at;

cout << ”Attı kiritiń: “; cin >> At; qatardaǵı_at = strstr(Atlar, At); cout << ”bunday at dizimde “; if(qatardaǵı_at

== NULL)

cout << ”joq.” << ’\n’; else

cout << ”bar.” <’\n’;

Programmada paydalanıwshıdan qatar bólegi sıpatında qanday da bir attı kiritiw talap etiledi hám bul mánis At qatarına oqıladı. Kiritilgen at programmada anıqlanǵan dizimde bar yamasa joq ekenligi anıqlanadı hám xabar beriledi.

strtok() funkciyasınıń sintaksisi

char* strtok(char *str, const char *delim);

kóriniste bolıp, ol str qatarında delim qatar-diziminde berilgen ayırıwshılar aralıǵına alınǵan qatar bóleklerin ajıratıp alıw imkániyatın beredi. Funkciya birinshi qatarda ekinshi qatar-dizimindegi ayırıwshını ushıratsa, onnan keyin nol-terminatordı qoyıw arqalı str qatardı ekige ajıratadı. Qatardıń ekinshi bóleginen ajıratıwshılar menen

“orap alınǵan” qatar bóleklerin tabıw ushın funkciyanıń keyingi shaqırılıwında birinshi parametr ornına NULL mánisin qoyıw kerek boladı. Tómendegi mısalda qatarlardı bóleklerge ajıratıw mısalı keltirilgen:

#include <iostream.h> #include <string.h> int main()

{

char Atlar[]= "Alisher,Farxad Munisa, Erkin? Akmal0, Nadira";

char Ajıratıwshı[] = " ,!?.0123456789"; char *qatardaǵı_at;

qatardaǵı_at = strtok(Atlar, Ajıratıwshı); if(qatardaǵı_at) cout<< qatardaǵı_at << '\n’; while(qatardaǵı_at)

{

qatardaǵı_at = strtok(NULL, Ajıratıwshı); if(qatardaǵı_at) cout<< qatardaǵı_at <<'\n’;

}

return 0;

}

Programma islewi nátiyjesinde ekranǵa Atlar qatarındaǵı „ ‟ (probel), „,‟

(útir), „?‟ (soraw belgisi) hám „0‟ (san) menen ajıratılgán qatar bólekleri - atlar shıǵarıladı:

Alisher

Farxad

Munisa

Erkin

Akmal

Nadira

Tiplerdi ózgertiw funkciyaları

Qatarlar menen islewde qatar kórinisinde berilgen sanlardı, san tipindegi mánislerge awdarıw yamasa keri ámeldi orınlawǵa tuwra keledi. C++ tiliniń «strlib.h» kitapxanasında bul ámellerdi orınlawshı funkciyalar toplamı bar.

Tómende salıstırmalı kóp isletiletuǵın funkciyalar ańlatpası keltirilgen. atoi() funkciyasınıń sintaksisi

int atoi(const char *ptr);

kórinisine iye bolıp, ptr kórsetiwshi ASCIIZ - qatardı int tipindegi sanǵa ótkeriwdi

ámelge asıradı. Funkciya qatar basınan belgilerdi sanǵa aylandıra baslaydı hám qatar aqırına shekem yamasa birinshi san bolmaǵan belgige shekem isleydi. Eger qatar basında sanǵa aylandırıw múmkin bolmaǵan belgi bolsa, funkciya 0 mánisti

qaytaradı. Lekin soǵan itibar beriw kerek “0” qatarı ushında funkciya 0 qaytaradı. Eger qatardı sanǵa aylandırıwdaǵı payda bolǵan san int shegarasınan shıǵıp ketse, sannıń kishi eki baytı nátiyje sıpatında qaytarıladı. Mısal ushın:

#include <stdlib.h> #include <iostream.h> int main()

{

char str[] = "32secund"; int i = atoi(str);

cout << i <<endl; return 0;

}

programmasınıń nátiyjesi sıpatında ekranǵa 32 sanı shıǵarıladı. Eger str mánisi “100000” bolsa, ekranǵa -31072 mánisi shıǵarıladı, sebebi 100000 sanınıń ishki

kórinisi 0х186A0 hám onıń sońǵı eki baytındaǵı 0х86A0 mánisi 31072 sanınıń qosımsha kodtaǵı kórinisi bolıp tabıladı.

atol() funsiyası dál atoi() funkciyasınday ámel qıladı, tek funkciya nátiyjesi long tipinde boladı. Eger payda bolǵan san mánisi long shegarasına sıymasa, funkciya kútilmegen mánisti qaytaradı.

atof() funkciyası járiyalanıwı

double atof(const char *ptr);

kórinisinde bolıp, ptr kórsetiwshi ASCIIZ-qatardı double tipindegi jıljıwshı noqatlı sanǵa ótkeriwdi ámelge asıradı. Qatar jıljıwshı noqatlı san formatında bolıwı kerek.

Sanǵa aylandırıw birinshi formatqa sáykes kelmeytuǵın belgi

ushırasqansha yamasa qatar sońına shekem dawam etedi.

 

 

strtod() funkciyası atof() funkciyasınan

parıqlı

túrde

qatardı double tipindegi sanǵa ótkeriwde konvertaciya processi úzilgen waqıtta aylandırıw múmkin bolmaǵan birinshi belgi adresin de qaytaradı. Bul óz náwbetinde qatardıń qáte bólegin qayta islew imkanın beredi.

strtod() funkciyasınıń sintaksisi:

double strtod(const char *s, char **endptr);

kórinisine iye hám endptr kórsetkishi konvertaciya etiliwi múmkin bolmaǵan birinshi belgi adresi. Konvertaciya etiliwshi qatarda qáte bolǵan jaǵdaydı kórsetiwshi mısal:

#include <stdlib.h> #include <iostream.h> int main(int argc, char *argv[])

{

char qatar[] = "3.14D15E+2"; char **kórsetkish; double x = strtod(qatar, kórsetkish);

cout << "konvertaciya etiliniwshi qatar: " << qatar <<endl;

cout << "konvertaciya etilgen x sanı: " << x << endl; cout << "konvertaciya úzilgen qatar astı: "

cout << *kórsetkish; return 0; }

Programma orınlanıwında x ózgeriwshi 3.14 sanın qabıl etedi, kórsetkish

ózgeriwshisi qatardaǵı „D‟ belgisinin‟ adresin kórsetedi. Ekranǵa tómendegi qatarlar izbe-izligi shıǵarıladı:

konvertaciya etiliwshi qatar: 3.14D15E+2

konvertaciya etilgen x sanı: 3.14

konvertaciya úzilgen qatar astı: D15E+2

Bir qatar funkciyalar keri ámeldi, yaǵnıy berilgen sandı qatarǵa aylandırıw ámellerin orınlaydı.

itoa() hám ltoa() funkciyaları sáykes túrde int hám long tipindegi sanlardı qatar kórinisine ótkeredi. Bul funkciyalar sáykes túrde tómendegi sintaksiske iye:

char* itoa(int num, char *str, int radix);

hám

char* ltoa(long num, char *str, int radix);

Bul funkciyalar num sanın radix argumentte kórsetilgen sanaq sistemasındaǵı kórinisin str qatarında payda etedi. Mısal ushın, 12345 sanınıń túrli sanaq sistemasındaǵı qatar kórinisin payda etiw máselesin kórip shıǵayıq:

int main()

{

char qatar2[20], qatar8[15], qatar10[10], qatar16[5]; int san = 12345;

itoa(san, qatar2, 2); itoa(san, qatar8, 8); itoa(san, qatar10, 10); itoa(san, qatar16, 16);

cout << "San kórinisleri" << endl;

cout << "2 sanaq sistemasında : " << qatar2 << endl; cout << "8 sanaq sistemasında : " << qatar8 << endl; cout << "10 sanaq sistemasında: " << qatar10 << endl; cout << "16 sanaq sistemasında: " << qatar16 << endl; return 0; }

Programma tómendegi qatarlardı ekranǵa shıǵaradı:

San kórinisleri

2 sanaq sistemasında: 11000000111001

8 sanaq sistemasında: 30071

Соседние файлы в предмете Программирование на C++