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

Joqari darejeli programmalastiriwda C++ Last

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

uzınlıǵınan úlken bolsa, qátelik haqqında eskertiledi, eger pos + n ańlatpa mánisi str qatar uzınlıǵınan úlken bolsa, str qatarınıń pos ornınan baslap qatar aqırına shekem bolǵan belgiler nusqalanadı. Bul qaǵıyda barlıq funkciyalar ushın tiyisli.

Mısal:

string s1, s2, s3;

s1 = “0123456789”;

s2.assign(s1,

4,

5);

//s2

=

“45678”

s3.assign(s1,

2,

20);

//s3

=

“23456789”

Úshinshi funkciya argumenttegi char tipindegi str qatardı string tipine aylandırıp, funkciyanı shaqırıwshı qatarǵa ózlestiredi:

char *strold;

cin.getline(strold, 100); //”0123456789” kiritiledi

string s1, s2;

 

s2.assign(strold, 6);

//s2 = ”012345”

s3.assign(strold, 20);

//s3 = ”0123456789”

9.2. Qatar bólegin basqa qatarǵa qosıw funkciyası

Qatar bólegin basqa qatarǵa qosıw funkciyaları tómendegishe:

append(const string &str);

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

append(const char *str, int n);

Bul funkciyalardı joqarıda keltirilgen sáykes assign funkciyalardan parıqı –

funkciyanı shaqırıwshı qatar aqırına str qatardıń ózin yamasa onıń bólegin qosadı.

char *sc;

 

cin.getline(sc, 100);

//”0123456789” kiritiledi

string s1, s, s2;

 

s1 = “mısal”;

 

s2 = sc;

//s2 = “0123456789”

s = “aaa”;

 

s2.append(”abcdef”);

//s2 += “abcdef” ámeli

 

//hám s2 = “0123456789abcdef”

s1.append(s2, 4, 5);

//s1 = “mısal45678”

s.append(sc, 5);

//s = “aaa012345”

 

151

9.3. Qatar bólegin basqa qatar ishine jaylastırıw funkciyası

Bir qatarǵa ekinshi qatar bólegin jaylastırıw ushın tómendegi funkciyalar

isletiledi:

insert(unsigned int pos1, const string &str);

insert(unsigned int pos1, const string &str, unsigned int

pos2,

unsigned int n);

insert(unsigned int pos1, const char *str, int n);

Bul funkciyalar append sıyaqlı isleydi, parıqı sonda, str qatarın yáki onıń bólegin funkciyanı shaqırıwshı qatardıń kórsetilgen pos1 ornınan baslap jaylastıradı.

Bunda ámel shaqırıwshı qatardıń pos1 ornınan keyin jaylasqan belgiler ońǵa jıljıydı.

Mısal:

char *sc;

cin.getline (sc, 100); //”0123456789” qatarı kiritiledi unsigned int i = 3;

string s1,

s, s2;

 

s1

= “mısallar”;

 

s2

= sc;

 

//s2 = “0123456789”

s = “xyz”;

 

 

s2.insert(i, “abcdef”);

//s2 = “012abcdef3456789”

s1.insert(i - 1, s2, 4, 5);

//s1 = “mi45678sallar”

s.insert(i

- 2, sc, 5);

//s = “x01234yz”

9.4. Qatar bólegin óshiriw funkciyası

Qatar bólegin óshiriw ushın tómendegi funkciyanı isletiw múmkin:

erase(unsigned int pos = 0, unsigned int n = npos);

Bul funkciya, onı shaqırıwshı qatardıń pos ornınan baslap n dana belgini

óshiredi. Egerde pos kórsetilmese, qatar basınan baslap óshiriledi. Eger n kórsetilmese, qatardı aqırına shekem bolǵan belgiler óshiriledi:

string s1, s2, s3;

s1 = “0123456789”;

s2 = s1;

s3 = s1;

152

s1.erase(4,

5);

//s1 = “01239”

s2.erase(3);

//s2 =

“012”

s3.erase();

 

//s3 =

“”

void clear() funkciyası, onı shaqırıwshı qatardı tolıq tazalaydı.

Mısal ushın:

s1.clear(); //qatar bos dep esaplanadı (s1 = “”)

9.5. Qatar bólegin almastırıw funkciyası

Bir qatar bóleginiń ornına basqa qatar bólegin qosıw ushın tómendegi

funkciyalardan paydalanıw múmkin:

replace(unsigned int pos1, unsigned int n1, const string

&str);

replace(unsigned int pos1, unsigned int n1, const string

&str,

unsigned int pos2, unsigned int n2);

replace(unsigned int pos1, unsigned int n1, const char *str,

int n);

Bul funkciyalar insert sıyaqlı isleydi, onnan parıqlı túrde ámel shaqırıwshı qatardıń kórsetilgen ornınan (pos1) n1 belgiler ornına str qatarın yamasa pos2 orınnan baslanǵan n2 belgiden ibarat bólekti ǵana qoyadı (almastıradı).

Mısal:

char *sc = “0123456789”;

 

unsigned int i =

3, j = 2;

 

string s1, s, s2;

 

s2 = sc;

 

//s2 = “0123456789”

s1 = “mısallar”;

 

 

s = “xyz”;

 

 

s2.replace(i, j,

“abcdef”);

//s2 =

“012abcdef56789”

 

 

s1.replace(i - 1, j + 1, s2, 4, 5);

//s1 = “mi45678lar”

s.replace(i - 2,

j + 2, sc, 5);

//s = “x012345”

swap(string & str) funkciyası eki qatardı óz-ara almastırıw ushın isletiledi.

Mısal ushın:

153

string s1, s2;

s1

=

“01234”;

s2

=

“98765432”;

s1.swap(s2); //s2 = “01234” hám s1 = “98765432” boladı

9.6. Qatar bólegin ajıratıp alıw funkciyası

Funkciya prototipi tómendegishe:

string substr(unsigned int pos=0, unsigned int n=npos) const;

Bul funkciya, onı shaqırıwshı qatardıń pos ornınan baslap n belgini nátiyje sıpatında qaytaradı. Eger pos kórsetilmese, qatar basınan baslap ajıratıp alınadı, eger n kórsetilmese, qatar aqırına shekem bolǵan belgiler nátiyje sıpatında qaytaradı:

string s1, s2, s3;

 

s1

= “0123456789”;

 

s2

= s1;

 

s3

= s1;

 

s2

= s1.substr(4, 5);

//s2 = “45678”

s3

= s1.substr(3);

//s3 = “3456789”

// “30123456789” qatar ekranǵa shıǵıwı ushın cout << s1.substr(1, 3) + s1.substr();

9.7. string tiptegi qatardı char tipke ótkeriw string tiptegi qatardı char tipine ótkiziw ushın

const char *c_str() const;

funkciyanı isletiw kerek. Bul funkciya char tiptegi ‘\0’ belgisi menen tamamlanatuǵın qatarǵa turaqlı kórsetkishti qaytaradı:

сhar *s1;

string s2 = “0123456789”;

s1 = s2.c_str();

Dál usı maqset ushın

const char * data()const;

funkciyasınan da paydalanıw múmkin. Bıraq bul funkciya qatar aqırına ‘\0’ belgisin qospaydı.

154

9.8. Qatar bólegin izlew funkciyaları

string klassında qatar bólegin izlew ushın hár túrli varianttaǵı funkciyalar anıqlanǵan. Tómende olardan tiykarǵıların kórip shıǵamız.

unsigned int find(const string &str, unsigned int

pos=0)const;

Funkciya, onı shaqırǵan qatardıń kórsetilgen ornınan (pos) baslap str qatardı izleydi hám birinshisi sáykes keliwshi qatar bóleginiń baslanıw indeksin juwap sıpatında qaytaradı, keri jaǵdayda maksimal oń pútin npos sanın qaytaradı

(npos = 4294967295), eger izlew ornı (pos) berilmese, qatar basınan baslap izlenedi.

unsigned int find(char c.unsigned int pos=0)const;

Bul funkciya aldınǵısınan parıqlı túrde qatardan c belgisin izleydi.

unsigned int rfind(const string &str,

unsigned int pos=npos)const;

Funkciya, onı shaqırǵan qatardıń kórsetilgen pos ornına shekem str qatardıń birinshi ushıraǵan orınıń indeksin qaytaradı, keri jaǵdayda npos mánisin qaytaradı, eger pos kórsetilmese qatar aqırına shekem izleydi.

unsigned int rfind(char c.unsigned int pos = npos) const;

Bul funkciyanıń aldınǵısınan parıqı - qatardan c belgisin izleydi.

unsigned int find_first_of(const string &str,

unsigned int pos=0)const;

Funkciya, onı shaqırǵan qatardıń kórsetilgen (pos) ornınan baslap str qatarınıń qálegen bir belgisin izleydi hám birinshi ushıraǵanınıń indeksin, keri jaǵdayda npos sanın qaytaradı.

unsigned int find_first_of(char c, unsigned int pos=0)const;

Bul funkciyanıń aldınǵısınan parıqı-qatardan ‘c’ belgisin izleydi.

unsigned int find_last_of(const string &str,

unsigned int pos=npos)const;

Funkciya, onı shaqırǵan qatardıń kórsetilgen (pos) orınnan baslap str qatardıń qálegen bir belgisin izleydi hám oń tárepten birinshi ushıraǵan indeksti, keri jaǵdayda npos sanın qaytaradı.

155

unsigned int find_last_of(char c, unsigned int pos=npos)

const;

Bul funkciyanıń aldınǵısınan parıqı-qatardan ‘c’ belgisin izleydi.

unsigned int find_first_not_of(const string &str,

unsigned int pos=0)const;

Funkciya, onı shaqırǵan qatardıń kórsetilgen (pos) ornınan baslap str qatardıń hesh bir belgisi kirmeytuǵın qatar bólegin izleydi hám shep tárepten birinshi ushıraǵanınıń indeksin, keri jaǵdayda npos sanın qaytaradı.

unsigned int find_first_not_of(char c,

unsigned int pos=0)const;

Bul funkciyanıń aldınǵısınan parıqı-qatardan ‘c’ belgisinen parıqlı birinshı belgini

izleydi.

unsigned int find_last_not_of(const string &str,

unsigned int pos=npos)const;

Funkciya, onı shaqırıwshı teksttiń kórsetilgen ornınan baslap str qatarın qurawshı belgiler toplamına kirmegen belgini izleydi hám eń oń tárepten birinshi tabılǵan belginiń indekisin, keri jaǵdayda npos sanın qaytaradı.

unsigned int find_last_not_of(char c,

unsigned int pos=npos)const;

Bul funkciyaniń aldınǵıdan parıqı - qatar aqırınan baslap с belgisine

uqsamaǵan belgini izleydi.

Izlew funkciyaların qollanıwǵa mısal:

#include <iostream.h> #include <conio.h> void main()

{

string s1=“01234567893456ab2csef”, s2=“456”, s3=“ghk2”; int i, j;

i = s1.find(s2);

 

j = s1.rfind(s2);

 

cout << i;

//i = 4

cout << j;

//j = 11

cout << s1.find(‘3’) << endl;

//nátiyje 3

156

 

cout << s1.rfind(‘3’) << endl;

//nátiyje 10

cout << s1.find_first_of(s3) << endl;

//nátiyje

2

cout << s1.find_last_of(s3) << endl;

//nátiyje

16

cout

<< s1.find_first_not_of(s2) << endl; //nátiyje 14

cout

<< s1.find_last_not_of(s2) << endl; //nátiyje 20

}

9.9. Tekstlerin salıstırıw

Tekstler bólimlerin salıstırıw ushın compare funkciyası isletiledi:

int compare(const string &str)const;

int compare(unsigned int pos1,unsigned int n1, const string & str)const;

int compare(unsigned int pos1,unsigned int n1, const string &str, unsigned int pos2, unsigned int n2)const;

Funkciyanıń birinshi formasında eki qatarlar tolıq salıstırıladı: eger funkciyanı shaqırıwshı qatar str qatardan kishi bolsa, funkciya teris san qaytaradı, eger olar teń bolsa 0 qaytaradı hámde eger funkciya shaqırıwshı qatar str qatardan úlken bolsa oń san qaytaradı.

Ekinshi formada dál birinshidegidiy ámeller orınlanadı, bıraq funkciya shaqırıwshı qatardıń pos1 ornınan baslap n1 dana belgili qatar astı str qatar menen salıstırıladı.

Úshinshi kóriniste funkciya shaqırıwshı qatardıń pos1 ornınan baslap n1 dana belgili qatar bólegi hám str qatardan pos2 ornınan baslap n2 dana belgili qatar bólekleri óz-ara salıstırıladı. Máselen:

#include <iostream.h> void main()

{

String s1=“01234567893456ab2csef”, s2=“456”, s3=“ghk”; cout << “s1 = ” << s1 << endl;

cout << “s2 = ” << s2 << endl; cout << “s3 = ” << s3 << endl; if(s2.compare(s3) > 0)

cout << “s2 > s3” << endl;

157

if(s2.compare(s3) == 0)

cout << “s2 = s3” << endl; if(s2.compare(s3) < 0)

cout << “s2 < s3” << endl; if(s1.compare(4, 6, s2) > 0)

cout << “s1[4-9] > s2” << endl; if(s1.compare(5, 2, s2, 1, 2) == 0)

cout << “s1[5-6] = s2[1-2]” << endl;

}

Mısalı. Familiya, atı hám ákesiniń atı menen studentler dizimi berilgen.

Dizim alfavit boyınsha tártiplensin.

Programma teksti:

#include <iostream.h> #include <alloc.h>

int main(int argc, char* argv[])

{

const int FAÁ_uzınlıǵı = 50; string *Student;

char *Qatar = (char*)malloc(FAÁ_uzınlıǵı); unsigned int studentler_sanı;

char san[3]; do

{

cout << "Studentler sanın kiritiń: "; cin >> san; } while((studentler_sanı = atoi(san)) <= 0);

Student =new string[studentler_sanı]; cin.ignore();

for(int i = 0; i < studentler_sanı; i++)

{

cout << i + 1 << "-studenttiń FAÁ: "; cin.getline(Qatar, 50); Student[i].assign(Qatar);

}

bool almastı = true;

for(int i = 0; i < studentler_sanı - 1 && almastı; i++)

158

{

almastı = false;

for(int j = i; j < studentler_sanı-1; j++) if(Student[j].compare(Student[j+1]) > 0)

{

almastı = true;

strcpy(Qatar, Student[j].data()); Student[j].assign(Student[j+1]); Student[j+1].assign(Qatar);

}

}

cout << "Alfavit boyınsha tártiplengen dizim:\n"; for(int i = 0; i < studentler_sanı; i++)

cout << Student[i] << endl; delete []student;

free(Qatar); return 0;

}

Programmada studentler dizimi string tipindegi Student dinamikalıq massiv kórinisinde járiyalanǵan hám onıń ólshemi paydalanıwshı tárepinen kiritilgen studentler_sanı menen anıqlanadı. Studentler sanınıń kiritiliwi qadaǵalanadı: klaviaturadan qatar oqıladı hám ol atoi() funkciyası járdeminde sanǵa aylandırıladı. Eger payda bolǵan san nolden úlken san bolmasa, sandı kiritiw processi tákirarlanadı. Studentler sanı anıq bolǵannan keyin hár bir studenttiń familiya, atı hám ákesiniń atı bir qatar sıpatında aǵımnan oqıladı. Keyin, string tipinde anıqlanǵan compare() funkciyası járdeminde massivtegi qatarlar ózara salıstırıladı hám sáykes orındaǵı belgiler kodlarınıń ósiwi boyınsha «kóbikli saralaw» arqalı tártiplenedi. Programma aqırında payda bolǵan massiv ekranǵa shıǵarıladı, hámde dinamikalıq massivler óshiriledi.

159

9.10. Qatar qásiyetlerin anıqlaw funkciyaları

string klassında qatar uzınlıǵı, onıń boslıǵın yamasa iyelegen yad kólemin

anıqlaytuǵın funkciyalar bar:

unsigned int size()const;

//qatar

ólshemi

unsigned int length()const;

//qatar

elementleri sanı

unsigned int max_size()const; //qatardıń maksimal

 

//uzunlıǵı(4294967295)

unsigned int capacity()const; //qatar

iyelegen yad kólemi

bool empty()const;

//true,

eger qatar bos bolsa

160