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

Joqari darejeli programmalastiriwda C++ Last

.pdf
Скачиваний:
9
Добавлен:
03.12.2023
Размер:
2.03 Mб
Скачать

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”;

141

char *element;

element = strpbrk(qatar1, qatar2);

cout << element << ’\n’;

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

ABCDEF

qatar astı shıǵarıladı.

8.9. 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ı.

142

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;

143

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

8.10. 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

144

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);

145

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()

146

{

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

10 sanaq sistemasında: 12345

16 sanaq sistemasında: 3039

gcvt() funkciyası

char* gcvt(double val, int ndec, char *buf);

kórinisindegi prototipke iye bolıp, double tipindegi val sanın buf kórsetiwshi ASCIIZ qatarına aylandıradı. Ekinshi argument sıpatında beriletuǵın ndec mánisi san kórinisinde cifrlar muǵdarın kórsetedi. Eger cifrlar sanı ndec mánisinen kóp bolsa, imkan bolsa sannıń bólshek bóliminen artıqsha cifrlar kesip taslanadı, keri jaǵdayda san eksponencial kóriniste payda etiledi. Tómendegi keltirilgen programmada gcvt() funkciyasınan paydalanıwdıń túrli variantları kórsetilgen.

int main()

{

char qatar[10];

double san;

int sanlar_sanı=4;

cout << "san kórinisindegi sanlar sanı:";

cout << sanlar_sanı << endl;

147

san = 3.154;

gcvt(san, sanlar_sanı, qatar);

cout << "3.154 sannıń san kórinisi: " << qatar; cout << endl;

san = -312.456;

gcvt(san, sanlar_sanı, qatar);

cout << "-312.456 sannıń qatar kórinisi: " cout << qatar << endl;

san = 0.123E+4;

gcvt(san, sanlar_sanı, qatar);

cout << "0.123E+4 sannıń qatar kórinisi: " cout << qatar <<endl;

san = 12345.456;

gcvt(san, sanlar_sanı, qatar);

cout << "12345.456 sannıń qatar kórinisi: " cout << qatar << endl;

return 0;

}

Programma ekranǵa izbe-izlikte san kórinislerin shıǵaradı:

san kórinisindegi sanlar sanı: 4

3.154 sannıń qatar kórinisi: 3.154

-312.456 sannıń qatar kórinisi : -312.5 0.123E+4 sannıń qatar kórinisi: 1230 12345.456 sannıń qatar kórinisi: 1.235e+04

148

IX Bap. String tipindegi qatarlar

C++ tilinde standart qatar tipine qosımsha sıpatında string tipi kiritilgen hám ol string klassı kórinisinde ámelge asırılǵan. Bul tiptegi qatar ushın ‘\0’ belgisi tamamlanıw belgisi esaplanbaydı hám ol ápiwayı belgiler massivi sıpatında qaraladı. string tipinde qatarlar uzınlıǵınıń orınlanatuǵın ámeller nátiyjesinde dinamikalıq tárizde ózgerip turıwı, onıń quramında bir qatar funkciyalar anıqlanǵanlıǵı bul tip penen islesiwde belgili bir qolaylıqlar jaratadı.

string tipindegi ózgeriwshiler tómendegishe járiyalanıwı múmkin:

string s1,s2,s3;

Bul tiptegi qatarlar ushın arnawlı ámeller hám funkciyalar anıqlanǵan. string qatarǵa baslanǵısh mánisler hár qıylı usıllar arqalı beriliwi múmkin:

string s1 = ”birinshi usıl”;

string s2(”ekinshi usıl”);

string s3(s2);

string s4 = s2;

Dál usınday, string tipindegi ózgeriwshiler ústinde mánis beriw ámelleri de

hár qıylı:

string s1, s2, s3;

char *str

= ”mısal”;

//qatarlı

ózgermes mánis beriw

s1

= ”Mánis beriwdiń 1-usılı”;

s2

= str;

//char tipindegi qatar júklenbekte

s3

= ’A’;

//bir belgini mánis sıpatında beriw

s3

= s3 +

s1 + s2 + ”0123abc”;//mánis sıpatında qatar ańlatpa

9.1-tablicasında string tipindegi qatarlar ústinde orınlanatuǵın ámeller keltirilgen.

Qatar elementine indeks quralınan tısqarı at() funkciyası arqalı múráját etiw múmkin:

string s1 = ”qatar mısalı”;

cout << s.at(4) //nátiyjede ‘r’ belgisi ekranǵa shıǵadı

149

Sonı aytıp ótiw kerek, string klassta usı tipdegi ózgeriwshiler menen isleytuǵın funkciyalar anıqlanǵan. Basqasha aytqanda, string tipinde járiyalanǵan

ózgeriwshiler (obyektler) óz funkciyalarına iye esaplanadı hám olardı shaqırıw ushın aldın ózgeriwshi atı, keyin ‘.’ (noqat) hám zárúr funkciya atı (argumentleri menen) jazıladı.

9.1-tablica. string tipindegi qatarlar ústinde orınlanatuǵın ámeller

Ámel

Mazmunı

Mısal

 

 

 

=, +=

Mánis beriw ámeli

s = “qatar01234”

s += “2qatar000”

 

 

 

 

 

+

Qatarlar jalǵaw ámeli (konkantenaciya)

s1 + s2

 

 

 

==, !=,

 

 

<, <=,

Qatarlardı salıstırıw ámeli

s1==s2 || s1>s2 && s1!=s2

>, >=

 

 

 

 

 

[]

Índeks beriw

s[4]

 

 

 

<<

Aǵımǵa shıǵarıw

сout << s

 

 

 

>>

Aǵımnan oqıw

сin >> s (probelge shekem)

 

 

 

9.1. Qatar bólegin basqa qatarǵa nusqalaw funkciyası

Bir qatar bólegin basqa qatarǵa júklew ushın tómendegi funkciyalardı isletiw

múmkin, olardıń prototipi tómendegishe:

assign(const string &str);

assign(const string &str, unsigned int pos, unsigned int n);

assign(const char *str, int n);

Birinshi funkciya mánis beriw ámelı menen ekvivalent bolıp tabıladı: string tipindegi str qatar ózgeriwshi yáki qatar turaqlı ámeldi shaqırıwshı qatarǵa beredi:

string s1, s2;

s1 = “birinshi qatar”;

s2.assign(s1); //s2 = s1 ámelge ekvivalent

Ekinshi funkciya shaqırıwshı qatarǵa argumenttegi str qatardıń pos ornınan n dana belgiden ibarat bolǵan qatar bólegin nusqalaydı. Egerde pos mánisi str qatar

150