logo

String turidagi satrlar va ular ustida amallar.

Загружено в:

08.08.2023

Скачано:

0

Размер:

50.0126953125 KB
String turidagi satrlar va ular ustida amallar.
String turi qanday tur?
String turi qanday masalalarni yechishga qo’llaniladi?
String turini qanday standart funksiyalarini bilasiz? String turi
C++ tilida standart satr turiga qo‘shimcha sifatida string turi kiritilgan va u string 
sinfi ko‘rinishida amalga oshirilgan. Bu turdagi satr uchun ‘\0’ belgisi tugash 
belgisi hisoblanmaydi va u oddiygina belgilar massivi sifatida qaraladi. string 
turida satrlar uzunligining bajarila-digan amallar natijasida dinamik ravishda 
o‘zgarib turishi, uning tarkibida bir qator funksiyalar aniqlanganligi bu tur bilan 
ishlashda ma’lum bir qulayliklar yaratadi.
#include   satr toifasidagi o’zgaruvchilar ustida amallar bajarish uchun.
string turidagi o‘zgaruvchilar quyidagicha e’lon qilinishi mumkin:
string s1,s2,s3;
Bu turdagi satrlar uchun maxsus amallar va funksiyalar aniq-langan.
string satrga boshlang‘ich qiymatlar har xil usullar orqali berish mumkin:
string s1=”birinchi usul”;
string s2(”ikkinchi usul”);
string s3(s2);
string s4=s2;
String turidagi   satrlar ustidan amallar
Amal Mazmuni Misol
=, += Qiymat berish amali s=”satr01234”
s+=”2satr000”
+ Satrlar ulash amali 
(konkantenatsiya) s1+s2
==, !=, <, 
<=, >, >= Satrlarni   solishtirish 
amallari s1==s2 || s1>s2 && s1!=s2 [] Indeks berish s[4]
<<   Oqimga chiqarish sout << s
>>   Oqimdan o‘qish sin >> s (probelgacha)
String first_name; // first_name — bu string turga ega bo'lgan o'zgaruvchi
Satr massivi e’lon qilinishida satr oxiriga terminator qo’yilishini va natijada satrga 
qo’shimcha bitta bayt qo’shilishi inobatga olinishi kerak: char satr[10]; Ushbu 
e’londa satr satri uchun jami 10 bayt ajratiladi – 9 satr hosil qiluvchi belgilar uchun
va 1 bayt terminator uchun. Satr o’zgaruvchilari e’lon qilinishida boshlang’ich 
qiymatlar qabul qilishi mumkin. Bu holda kompilyator avtomatik ravishda satr 
uzunligi hisoblaydi va satr oxiriga nol–terminatorni qo’shib qo’yadi:
char Hafta_kuni[]=”Juma”;
Ushbu e’lon quyidagi e’lon bilan ekvivalent:
char Hafta_kuni[]= {‘J’,’u’,’m’,’a’,’\0’};
 Satr qiymatini o’qishda oqimli o’qish operatori “>>” o’rniga getline() 
funktsiyasini ishltagan ma’qul   hisoblanadi , chunki oqimli o’qishda probellar inkor 
qilinadi (garchi ular satr belgisi hisoblansa ham) va o’qilayotgan belgilar ketma– 
ketligi satrdan “oshib” ketganda ham belgilarni kiritish davom etishi mumkin. 
Natijada satr o’ziga ajratilgan o’lchamdan ortiq belgilarni qabul qilishi 
mumkin.   Chu sababli , getline() funktsiyasi ikkita parametrga ega bo’lib, birinchi 
parametr o’qish amalga oshirilayotgan satrga ko’rsatgich, ikkinchi parametrda esa 
kiritilishi kerak bo’lgan belgilar soni ko’rsatiladi. Satrni getline() funktsiyasi orqali
o’qishga misol ko’raylik:
Programmada satr satri 5 ta   belgini qabul qilishi mumkin , ortiqchalari tashlab 
yuboriladi. getline() funktsiyasiga murojaatda ikkinchi parametr qiymati 
o’qilayotgan satr uzunligidan katta bo’lmasligi kerak. Satr bilan ishlaydigan 
funktsiyalarning aksariyati string.h kutubxonasida jamlangan. Nisbatan ko’p 
ishlatiladigan funktsiyalarning tavsifini keltiramiz.
2.String turi qanday masalalarni yechishga qo’llaniladi? Satr qiymatini biridan ikkinchisiga nusxalash mumkin. Buning uchun bir qator 
standart funktsiyalar aniqlangan bo’lib, ularning tavsiflari quyida keltiramiz.
strcpy() funktsiyasi prototipi
char* strcpy(char* str1, const char* str2)
ko’rinishga ega va bu funktsiya str2 ko’rsatib turgan satrdagi belgilarni str1 
ko’rsatib turgan satrga baytma-bayt nusxalaydi. Nusxalash str2 ko’rsatib turgan 
satrdagi nol-terminal uchraguncha davom etadi. Chu sababli, str2 satr uzunligi str1 
satr uzunligidan katta emasligiga ishonch hosil qilish kerak, aks holda berilgan 
sohasida (segmentida) str1 satrdan keyin joylashgan berilganlar “ustiga” str2 
satrning “ortiqcha” qnomi yozilishi mumkin.
Navbatdagi programma qnomi “Satrni nusxalash!” satrini Str satrga nusxalaydi:
char Str[20];
strcpy(Str, “Satrni nusxalash!”);
Zarur bo’lganda satrning   qaysidir joyidan boshlab , oxirigacha nusxadash mumkin. 
Masalan, “Satrni nusxalash!” satrini 8 belgisidan boshlab nusxa olish zarur bo’lsa, 
uni quyidagicha yechish mumkin:
strncpy() funktsiyasining strcpy() funktsiyasidan farqli joyi shundaki, unda bir 
satrdan ikkinchisiga nusxalanadigan belgilar soni ko’rsatiladi. Uningsintaksisi 
quyidagi ko’rinishga ega:
char* strncpy(char* str1, const char* str2, size_t num)
Agar str1 satr uzunligi str2 satr uzunligidan kichik bo’lsa, ortiqcha belgilar “kesib”
tashlanadi. strncpy() funktsiyasi ishlatilishiga misol ko’raylik:
Programmada Uzun_str satri boshidan 4 belgi Qisqa_str satriga oldingi qiymatlar 
ustiga nusxalanadi   va natijada ekranga
01234567890123456789
0123EF
xabarlari chop etiladi.
strdup() funktsiyasiga yagona parametr sifatida satr–manbaga ko’rsatgich uzatiladi.
Funktsiya, satrga mos xotiradan joy ajratadi, unga satrni nusxalaydi va yuzaga 
kelgan satr-nusxa adresini qaytaradi. strdup() funktsiya sintaksisi: char*  strdup(const char* sourse) Quyidagi programma bo’lagida satr1 satrining nusxasi 
xotiraning satr2 ko’rsatgan joyida paydo bo’ladi:
char* satr1=”Satr nusxasini olish.”;
char* satr2;
satr2=strdup(satr1);
Satrlarni ulash ham foydalaniladi.
Satrlarni ulash (konkatenatsiya) amali yangi satrlarni hosil qilishda keng 
qo’llaniladi. Bu maqsadda string.h kutubxonasida strcat() va strncat() funktsiyalari 
aniqlangan.
strcat( ) funktsiyasi sintaksisi quyidagi ko’rinishga ega:
char* strcat(char* str1, const char* str2)
Funktsiya ishlashi natiajasida str2 ko’rsatayotgan satr, funktsiya qaytaruvchi satr – 
str1 ko’rsatayotgan satr oxiriga ulanadi. Funktsiyani chaqirishdan oldin str1 satr 
uzunligi, unga str2 satr ulanishi uchun yetarli bo’lishi hisobga olingan bo’lishi 
kerak.
Quyida keltirilgan amallar ketma-ketligi bajarilishi natijasida satr satriga 
qo’shimcha satr ostilari ulanishi ko’rsatilgan:
char satr[80];
strcpy(satr,”Bu satrga “);
strcat(satr,”satr osti ulandi.”);
Amallar ketma-ketligini bajarilishi natiajasida satr satri “Bu satrga satr osti 
ulandi.” qiymatiga ega bo’ladi.
strncat( ) funktsiyasi strcat( ) funktsiyadan farqli ravishda str1 satrga str2 satrning 
ko’rsatilgan uzunligidagi satr ostini ulaydi. Ulanadigan satr osti uzunligi 
funktsiyaning uchinchi parametri sifatida beriladi.
Funktsiya sintaksisi
char* strncat(char* str1, const char* str2, size_t num)
Pastda keltirilgan programma bo’lagida str1 satrga str2 satrning
boshlang’ich 10 ta belgidan iborat satr ostini ulaydi:
char satr1[80]=”Programmalash tillariga misol bu-“; char satr2[80]=”C++,Pascal, Basic”;
strncpy(satr1,satr2,10);
cout<<satr1;< p=""></satr1;<>
Amallar bajarilishi natijasida ekranga “Programmalash tillariga misol buC+
+,Pascal” satri chop etiladi.
Satrlarni   solishtirish
Satrlarni solishtirish ularning mos o’rindagi belgilarini solishtirish (katta yoki 
qichikligi) bilan aniqlanadi. Buning uchun string.h kutubxonasida standart 
funktsiyalar mavjud.
strcmp( )   funktsiyasi sintaksisi
int strcmp(const char* str1, const char* str2)
ko’rinishiga ega bo’ltb, funktsiya str1 va str2 solishtirish natijasi sifatida son
qiymatlarni qaytaradi va ular quyidagicha izohlanadi:
Funktsiya harflarning bosh va kichikligini farqlaydi. Buni misolda ko’rishimiz 
mumkin:
char satr1[80]=”Programmalash tillariga bu- C++,pascal, Basic.“;
char satr2[80]=”Programmalash tillariga bu- C++,Pascal, Basic.“;
int i;
i= strcmp(satr1,satr2);
Natijada i o’zgaruvchisi musbat qiymat qabul qiladi, chunki solishtirilayotgan 
satrlardagi “pascal” va “Pascal” satr ostilarida birinchi harflar farq qiladi. 
Keltirilgan misolda i qiymati 32 bo’ladi – farqlanuvchi harflar kodlari ayrimasi 
32ga teng . Agar funktsiyaga
i= strcmp(satr2,satr1);
ko’rinishida murojaat qilinsa i qiymati –32 bo’ladi. Agar satrlardagi bosh yoki 
kichik harflarni farqlamasdan solishtirish amalini bajarish zarur bo’lsa, buning 
uchun stricmp() funktsiyasidan foydalanish mumkin. Yuqorida keltirilgan 
misoldagi satrlar uchun
i=strcmpi(satr2,satr1);
amali bajarilganda i qiymati 0 bo’ladi. strncmp() funktsiyasi sintaksisi
int strncmp(const char* str1, const char* str2, size_t num)
ko’rinishida bo’lib, str1 str2 satrlarni boshlang’ich num sonidagi belgilarini 
solishtiradi. Funktsiya harflar registrini inobatga oladi. Yuqorida misolda 
aniqlangan satr1 va satr2 satrlar uchun
i=strncimp(satr1,satr2,31);
amali bajarilishida i qiymati 0 bo’ladi, chunki satrlar boshidagi 31 belgilar bir xil. 
strncmpi( ) funktsiyasi strncmp( ) funktsiyasidek amal qiladi, farqli tomoni 
shundaki, solishtirishda harflarning registrini hisobga olinmaydi. Xuddi shu satrlar 
uchun
i=strncmpi(satr1,satr2,32); amali bajarilishi natijasida i o’zgaruvchi qiymati 0 
bo’ladi.
Satrni teskari tartiblash
Satrni teskari tartiblashni uchun strrev() funktsiyasidan foydalanish mumkin. Bu 
funktsiya quyidagicha prototipga ega:
char* strrev(char* str)
Satr reversini hosil etishga misol:
char str[]=”telefon”;
cout <<="" p="">
amallar bajarilishi natijasida ekranga “nofelet” satri chop etiladi.
3.String turini qanday standart funksiyalarini bilasiz?
Satrda b е lgini izlash funksiyalari:[3(110-112)] Satrlar bilan ishlashda unda birorta 
b е lgini izlash uchun «string.h» ku-tubxonasida bir qator standart funksiyalar 
mavjud.
Birorta b е lgini b е rilgan satrda bor yoki yo’qligini aniqlab b е ruvchi 
strchr()   funksiyasining prototipi
char* strchr(const char* string, int c);
ko’rinishida bo’lib, u s b е lginining string satrida izlaydi. Agar izlash 
muvofaqqiyatli bo’lsa, funksiya shu b е lgining satrdagi o’rnini (adr е sini) funksiya  natijasi sifatida qaytaradi, aks holda, ya'ni b е lgi satrda uchramasa funksiya NULL 
qiymatini qaytaradi. B е lgini izlash satr boshidan boshlanadi.
Quyida k е ltirilgan programma bo’lagi b е lgini satrdan izlash bilan bog’liq.
char satr[]=”0123456789”;
char* pSatr;
pSatr=strchr(satr,’6’);
Programma ishlashi natijasida pSatr ko’rsatkichi satr satrining ‘6’ b е lgisi 
joylashgan o’rni adr е sini ko’rsatadi.
strrchr() funksiyasi b е rilgan b е lgini (s) b е rilgan satr (string) oxiridan boshlab 
izlaydi. Agar izlash muvaffaqiyatli bo’lsa, b е lgini satrga oxirgi kirishining o’rnini 
qaytaradi, aks holda NULL.
Misol uchun
char satr[]=”0123456789101112”;
char* pSatr;
pSatr=strrchr(satr,’0’);
ammallarini bajarilishida pSatr ko’rsatkichi satr satrining "01112" satr qismining 
boshlanishiga ko’rsatadi.
strspn() funksiyasi ikkita satrni b е lgilarni solishtiradi. Funksiya quyidagi
size_t strspn(const char* str1, const char* str2);
ko’rinishga ega bo’lib, u str1 satrdagi str2 satrga kiruvchi birorta b е lgini izlaydi va 
agar bunday el е m е nt topilsa, uning ind е ksi funksiya   qiymati sifatida qaytariladi , 
aks holda funksiya satr uzunligidan bitta ortiq qiymatni qaytaradi.
Misol:
char satr1[]=”0123ab6789012345678”;
char satr2[]=”a32156789012345678” ;
int farqli_belgi;
farqli_belgi=strspn(satr1,satr2);
cout<<”Satr1 satridagi Satr2 satrga kirmaydigan\birinchi belgi indeksi = 
”<<farqli_belgi;< p=""></farqli_belgi;<> cout<<”va u ‘”<<satr1[farqli_belgi]<
amallar bajarilishi natijasida ekranga
Satrlardagi mos tushmagan belgi indeksi = 5
satri chop etiladi.
strcspn() funksiyasining prototipi
size_t strcspn(const char* str1, const char* str2);
ko’rinishida bo’lib, u str1 va str2 satrlarni solishtiradi va str1 satrining str2 satriga 
kirgan birinchi b е lgani ind е ksini qaytaradi.</satr1[farqli_belgi]<
Masalan.
char satr[]=”Birinchi satr”;
int index;
index=strcspn(satr,”sanoq tizimi”);
amallari bajarilgandan k е yin index o’zgaruvchisi 1 qiymatini qabul qiladi, chunki 
birinchi satrning birinchi o’rindagi b е lgisi ikkinchi satrda uchraydi.
strpbrk() funksiyasining prototipi
char strpbrk(const char* str1, const char* str2);
ko’rinishga ega bo’lib, str1 satrdagi str2 satrga kiruvchi birorta b е lgini izlaydi va 
agar bunday el е m е nt topilsa, uning adr е si funksiya qiymati sifatida qaytariladi, aks
holda funksiya NULL qiymati qaytaradi. Quyidagi misol funksiyani qanday 
ishlashini ko’rsatadi.
char satr1[]=”0123456789ABCDEF”;
char satr2[]=”ZXYabcdefABC”;
char* element;
element = strpbrk(satr1,satr2);
cout<<element<<="" p=""></element<
Programma ishlashi natijasida ekranga str1satrining
ABCDEF
satr ostisi chop etiladi.
Satr qismlarini izlash funksiyalari: [3(112-114)] Satrlar bilan ishlashda bir satrda 
ikkinchi bir satrning (yoki uning biror qismini) to’liq kirishini aniqlash bilan  bog’liq masalalar nisbatan ko’p uchraydi. Masalan, matn tahrirlaridagi satrdagi 
birorta satr qismini ikkinchi satr qismi bilan almashtirish masalasini misol k е ltirish
mumkin (yuqorida xuddi shunday masala uchun programma k е ltirilgan). Standart 
«string.h» kutubxonasi bu toifadagi masalalar uchun bir n е chta funksiyalarni taklif 
etadi.
strstr() funksiyasi quyidagicha e'lon qilinadi:
char* strstr(const char* str,const char* substr);
Bu funksiya str satriga substr   satr qismi kirishi t    е   kshiradi    , agar substr satr qismi str 
satriga to’liq kirishi mavjud bo’lsa, satrning chap tomondan birinchi kirishdagi 
birinchi b е lgining adr е si javob tariqasida qaytariladi, aks holda funksiya NULL 
qiymatini qaytaradi.
Quyidagi misol strstr() funksiyasini ishlatishni ko’rsatadi.
char satr1[]=”Satrdan satr ostisi izlanmoqda, satr ostisi mavjud”;
char satr2[]=”satr ostisi”;
char* satr_osti;
satr_osti=strstr(satr1,satr2);
cout<<satr_osti<
Programma buyruqlari bajarilishi natijasida ekranga
satr ostisi izlanmoqda, satr ostisi mavjud
satri chop etiladi.</satr_osti<
K е yingi programma bo’lagida satrda boshqa bir satr qismi mavjud yoki yo’qligini 
nazorat qilish holati ko’rsatilgan: |
char Ismlar[]= ”Alisher,Farxod,Munisa,Erkin,Akmal,Nodira”;
char Ism[10];
char* Satrdagi_ism;
cout<<”Ismni kiriting: ”; cin>>Ism;
Satrdagi_ism=strstr(Ismlar,Ism);
cout<<”Bunaqa ism ru\’yxatda ”;
if(Satrdagi_ism==NULL) cout<<”yo\’q.”<<’\n’;
ese cout<<”bor .”<<’\n’; Programmada foydalanuvchidan satr qismi sifatida birorta nomni kiritish talab 
qilinadi va bu qiymat Ism satriga o’qiladi. Kiritilgan ism programmada aniqlangan 
ro’yxatda (Ismlar satrida) bor yoki yo’qligi aniqlanadi va xabar b е riladi.
strtok()   funksiyasining sintaksisi
char* strtok(char* str, const char* delim);
ko’rinishda bo’lib, u str satrida delim satr-ro’yxatida b е rilgan ajratuvchilar 
oralig’iga olingan satr qismlarni ajratib olish imkonini b е radi. Funksiya birinchi 
satrda ikkinchi satr-ro’yxatdagi ajratuvchini uchratsa, undan k е yin nol-t е rminatorni
qo’yish orqali str satrni ikkiga ajratadi. Satrning ikkinchi bo’lagidan ajratuvchilar 
bilan «o’rab olingan» satr qismlari topish uchun funksiyani k е yingi chaqirilishida 
birinchi param е tr o’rniga NULL qiymatini qo’yish k е rak bo’ladi. Quyidagi 
misolda satrni bo’laklarga ajratish masalasi qaralgan:
#include
#include
int main()
{
char Ismlar[]=
”Alisher,Farxod,Munisa,Erkin? Akmal0,Nodira”;
char Ajratuvchi[]=” ,!?.0123456789”;
char* Satrdagi_ism;
Satrdagi_ism=strtok(Ismlar,Ajratuvchi);
if(Satrdagi_ism) cout<<satrdagi_ism<<="" p=""></satrdagi_ism<
while(Satrdagi_ism)
{
Satrdagi_ism=strtok(NULL,Ajratuvchi);
if(Satrdagi_ism) cout<<satrdagi_ism<<="" p=""> }
return 0;
}
Programma ishlashi natijasida ekranga Ismlar satridagi ‘_’ (prob е l), ‘,’ (v е rgul), ‘?’
(so’roq b е lgisi) va ‘0’ (raqam) bilan ajratilgan satr qismlari isimlari chop qlinadi:
Alisher
Farxod
Munisa
Erkin
Akmal
Nodira
Turlarni o’zgartirish funksiyalari: [3(114-118)] Satrlar bilan ishlashda satr 
ko’rinishida b е rilgan sonlarni,son turlaridagi qiymatlarga aylantirish yoki t е skari 
amalni bajarishga to’g’ri k е ladi. C++ tilining «strlib.h» kutubxonasida bu 
amallarni bajaruvchi funksiyalar to’plami mavjud. Quyida nisbatan ko’p 
ishlatiladigan funksiyalar tavsifi k е ltirilgan.
atoi() funksiyasining sintaksisi
int atoi(const char* ptr);
ko’rinishga ega bo’lib, ptr ko’rsatuvchi ASCIIZ-satrni int turidagi songa o’tka-
zishni amalga oshiradi. Funksiya satr boshidan b е lgilarni songa aylantira boshlaydi
va satr oxirigacha yoki birinchi raqam bo’lmagan b е lgigacha ishlaydi. Agar satr 
boshida songa aylantirish mumkin bo’lmagan b е lgi bo’lsa, funksiya 0 qiymatini 
qaytaradi. L е kin, shunga e'tibor b е rish k е rakki, "0" satri uchun ham funksiya 0 
qaytaradi. Agar satrni songa aylantirishdagi hosil bo’lgan son int ch е garasidan 
chiqib k е tsa, sonning kichik ikki bayti natija sifatida qaytariladi. Misol uchun
#include
#include
int main()
{
char str[]=”32secund”; int i=atoi(str);
cout<<i<<end1;< p=""></i<<end1;<>
return 0;
}
programmasining natijasi sifatida ekranga 32 sonini chop etadi. Agar str qiymati 
"100000" bo’lsa, ekranga -31072 qiymati chop etiladi, chunki 100000 soning ichki 
ko’rinishi 0x186AO va uning oxirga ikki baytidagi 0x86AO qiymati 32072 
sonining qo’shimcha koddagi ko’rinishidir.
atol() funksiyasi xuddi atoi() funksiyasid е k amal qiladi, faqat funksiya natijasi long
turida bo’ladi. Agar hosil bo’lgan son qiymati long ch е garasiga sig’masa, funksiya 
kutilmagan qiymatni qaytaradi.
atof() funksiyasi e'loni
double atof() (const char* ptr);
ko’rinishida bo’lib, ptr ko’rsatuvchi ASCIIZ-satrni double turidagi suzuvchi 
nuqtali songa o’tkazishni amalga oshiradi. Satr quyidagi formatda bo’lishi k е rak:
.< е | Е >
Bu  е rda:
- prob е llar yoki tabulyatorlar k е tma-k е tligi;
-'+' va '-' b е lgilari;
- o’nlik raqamlar;
< е | Е > - o’nlik asos darajasini anglatuvchi b е lgilar.
Songa aylantirish birinchi formatga mos k е lmaydigan b е lgi uchraguncha yoki satr 
oxirigacha davom etadi.
strtod() funksiyasi atof() funksiyasidan farqli ravishda satrni doub1 е  turida-gi 
songa o’tkazishda konv е rtatsiya jarayoni uzulgan paytda aylantirish mumkin  bo’lmagan birinchi belgi adresini ham qaytaradi .Bu o’z navbatida satrni xato 
qismini qayta ishlash imkonni beradi.
strtod() funksiyasining sintaksisi
double strtod(const char *s, char **endptr);
ko’rinishga ega va endptr ko’rsatkichi konv е rtatsiya qilinishi mumkin bo’lmagan 
birinchi b е lgi adr е si. Konv е rtatsiya qilinuvchi satrda xato bo’lgan holatni 
ko’rsatuvchi misol:
#include
#include
int main(int argc, char* argv[])
{
char satr[]=”3.14D15E+2”;
char **kursatkich;
double x= strtod(satr,kursatkich);
cout<<”Konvertatsiya qilinuvchi satr: ”<<satr<<="" p=""></satr<
cout<<”Konvertatsiya qilingan x soni: ”<<x<<end1;< p=""></x<<end1;<>
cout<<”Konvertatsiya uzilgan satr ostisi: “
cout<<*kursatkich;
return 0;
}
Programma bajarilishida x o’zgaruvchi 3.14   sonini qabul qiladi , kursatkich 
o’zgaruvchisi satrdagi ‘D’ b е lgisining adr е sini ko’rsatadi. Ekranga quyidagi satrlar
k е tma-k е tligi chop etiladi:
Konvertatsiya qilinuvchi satr: 3.14D15E+2
Konvertatsiya qilingan x soni: 3.14
Konvertatsiya uzilgan satr ostisi: D15E+2
Bir qator fo’nksiyalar t е skari amalni, ya'ni b е rilgan sonni satrga aylantirish 
amallarini bajaradi. itoa() va ltoa() funksiyalari mos ravishda int va long turidagi sonlarni satrga 
ko’rinishiga o’tkazadi. Bu funksiyalar mos ravishda quyidagi sintaksisga ega:
char* itoa(int num, char *str, int radix);
ва
char* ltoa(long num, char *str, int radix);
Bu funksiyalar num sonini radix argum е ntda ko’rsatilgan sanoq cist е masidagi 
ko’rinishini str satrda hosil qiladi. Misol uchun 12345 sonini turli sanoq 
sist е madagi satr ko’rinishini hosil qilish masalasini ko’raylik:
int main()
{
char satr2[20],satr8[15],satr10[10],satr16[5];
int son=12345;
itoa(son,satr2,2);
itoa(son,satr8,8);
itoa(son,satr10,10);
itoa(son,satr16,16);
cout<<”Son ko’rinishlari”<<end1;< p=""></end1;<>
cout<<”2 lik sanoq sistemasida :”<<satr2<<="" p=""></satr2<
cout<<”8 lik sanoq sistemasida :”<<satr8<<end1;< p=""></satr8<<end1;<>
cout<<”10 lik sanoq sistemasida:”<<satr10<<="" p=""></satr10<
cout<<”16 lik sanoq sistemasida:”<<satr16<<end1;< p=""></satr16<<end1;<>
return 0;
{
Programma ekranga quyidagi satrlarni chiqaradi:
Son ko’rinishlari
2 lik sanoq sistemasida :11000000111001
8 lik sanoq sistemasida :30071
10 lik sanoq sistemasida:12345
16 lik sanoq sistemasida:3039
gcvt() funksiyasi char* gcvt(double val, int ndec, char *buf);
ko’rinishdagi prototipga ega bo’lib, doubl е  turidagi val sonini buf ko’rsatuvchi 
ASCIIZ satrga aylantiradi. Ikkinchi argum е nt sifatida b е riladigan ndec qiymati son
ko’rinishida raqamlar miqdorini ko’rsatadi. Agar raqamlar soni ndec qiymatidan 
ko’p bo’lsa, imkon bo’lsa sonning kasr qismidan ortiqcha raqamlar qirqib 
tashlanadi (yaxlitlangan holda), aks hodda son ekspon е nsial ko’rinishda hosil 
qilinadi. Quyidagi k е ltirilgan programmada gcvt() funksiyasidan foydalanishning 
turli variantlari ko’rsatilgan.
int main()
{
char satr[10];
double son;
int raqamlar_soni=4;
cout<<”Son ko’rinishidagi raqamlar soni: ”;
cout<<”raqamlar_soni<<end1;< p=""></end1;<>
son=3.154;
gcvt(son,raqamlar_soni,satr);
cout<<”3.154 sonining satr ko;’rinishi: ”<<satr<<="" p=""></satr<
son=-312.456;
gcvt(son,raqamlar_soni,satr);
cout<<”-312.456 sonining satr ko’rinishi: ”
cout<<satr<<="" p=""></satr<
son=0.123E+4;
gcvt(son,raqamlar_soni,satr);
cout<<”0.123E+4 sonining satr ko’rinishi: ”
cout<<satr<<="" p=""></satr<
son=12345.456;
gcvt(son,raqamlar_soni,satr);
cout<<”12345.456 sonining satr ko’rinishi: ”
cout<<satr<<="" p=""></satr< return 0;
}
Programma ekranga k е tma-k е t ravishda son ko’rinishlarini chop etadi:
Son ko’rinishidagi raqamlar soni:4
3.154 sonining satr ko;’rinishi: 3.154
-312.456 sonining satr ko’rinishi:-312.5
0.123E+4 sonining satr ko’rinishi:1230
</satrdagi_ism<
2.   String   turidagi   satrni   e’lon   qilish   va        qiymat        berish       
string   turidagi   o‘zgaruvchilar   quyidagicha e’lon   qilinishi   mumkin:  
string   s1,s2,s3;  
Bu turdagi   satrlar uchun maxsus   amallar va funksiyalar   aniqlangan.   string  
satrga   boshlang‘ich   qiymatlar   har        xil        usullar       
orqali   berish mumkin:  
string  
s1=”birinchi usul”;  
string  
s2(”ikkinchi usul”);  
string   s3(s2);  
string   s4=s2;  
Xuddi   shunday,   string   turidagi   o‘zgaruvchilar ustida   qiymat berish 
amallari   ham   har xil:  
string   s1,s2,s3 ;   char   *str=”misol”;  
//satrli o‘zgarmas   qiymati   berish  
s1=”Qiymat berish 1-usul”;  
s2=str;                                     //   char        turidagi satr        yuklanmoqda     
s3=’A’;                                   // bitta   belgi qiymat sifatida berish  
s3=s3+s1+s2+”0123abc”;   //qiymat   sifatida   satr   ifoda  
8.2-jadvalida string turidagi   satrlar ustidan   amallar keltirilgan.  
Satr elementiga indeks   vositasidan tashqari   at()   funksiyasi   orqali   murojaat qilish 
mumkin:  
string   s1=”satr   misoli“;  
cout<<="" b="">  
Shuni   aytib   o‘tish   kerakki, string   sinfda   shu   turdagi   o‘zgaruvchilar bilan 
ishlaydigan   funksiyalar aniqlangan.   Boshqacha       
aytganda, string   turida e’lon qilingan o‘zgaruvchilar 
(obyektlar)   o‘z   funksiyalariga   ega   hisoblanadi   va   ularni   chaqirish  
uchun   oldin   o‘zgaruvchi   nomi,   keyin ‘.’   (nuqta) va   zarur   funksiya 
nomi   (argumentlari   bilan)   yoziladi.  
8.2-jadval. string   turidagi   satrlar   ustidan        amallar       
  3.   String   turidagi   satr   funktsiyalar   (metodlar).  
Satr qismini   boshqa   satrga nusxalash funksiyasi  
Bir   satr qismini   boshqa   satrga   yuklash uchun kuyidagi   funksiya-larni   ishlatish 
mumkin,   ularni   prototipi   kuyidagicha:  
assign(const   string   &str);  
assign(const   string   &str,unsigned int   pos,  
              unsigned int   n);  
assign(const   char   *str, int   n);  
Birinchi   funksiya   qiymat   berish amal  
bilan ekvivalentdir:   string   turidagi   str   satr 
o‘zgaruvchi   yoki   satr   o‘zgarmasni   amalni  
chaqiruvchi   satrga   beradi:  
string   s1,s2;  
s1=”birinchi   satr”;  
s2.assign(s1);   //   s2=s1   amalga ekvivalent  
Ikkinchi   funksiya chaqiruvchi   satrga   argumentdagi        str        satrning        pos       
o‘rnidan n   ta   belgidan iborat   bo‘lgan   satr        qismini       
nusxalaydi.   Agarda pos   qiymati   str   satr uzunligidan   katta 
bo‘lsa,   xatolik        haqida        ogohlantiriladi    , agar   pos   +   n   ifoda        qiymati       
str   satr uzunligidan   katta bo‘lsa,   str   satrining   pos   o‘rnidan   boshlab satr 
oxirigacha   bo‘lgan belgilar nusxalanadi.   Bu qoida       
barcha   funksiyalar uchun tegishlidir.  
Misol:  
string   s1,s2,s3;  
s1=”0123456789”;   s2.assign(s1,4,5);   //   s2=”45678”  
s3.assign(s1,2,20);                  
//   s3=”23456789”  
Uchinchi   funksiya   argumentdagi   char   turidagi   str   satr
ni   string   turiga   aylantirib ,   funksiyani   chaqiruvchi   satrga o‘zlashtiradi:  
char   *   strold;  
cin.getline(strold,100);//”0123456789”   kiritiladi  
string   s1,s2;  
s2.assign(strold,6);                
//   s2=”012345”  
s3.assign(strold,20);            
//   s3=”0123456789”  
Satr qismini   boshqa satrga qo‘shish   funksiyasi  
Satr qismini   boshqa   satrga   qo‘shish funksiyalari   quyidagicha:  
append(const string   &str);   append(const string   &   str,unsigned int   pos,  
                        unsigned   int   n);  
append(const char   *str, int   n);  
Bu funksiyalarni   yuqorida   keltirilgan   mos   assign   funksiya-lardan   farqi   -  
funksiyani   chaqiruvchi   satr oxiriga   str   satrni   o‘zini  
yoki   uning   qismini   qo‘shadi.  
char   *   sc;  
cin.getline(sc,100);                
//”0123456789”   kiritiladi  
string   s1,s,s2;  
s2=sc;   s1=”misol”;  
s=”aaa”;                                                       //s2=”0123456789”  
s2.append(”abcdef”);   //s2+=”abcdef”   amali  
      //va  
s2=”0123456789abcdef”  
s1.append(s2,4,5);      
//s1=”misol45678”  
s.append(ss,5);                 // s=”aaa012345”  
Satr qismini   boshqa satr   ichiga   joylashtirish funksiyasi  
Bir   satrga ikkinchi   satr qismini   joylashtirish uchun   quyidagi   funksiyalar 
ishlatiladi:  
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);  
Bu fuksiyalar   append   kabi        ishlaydi    ,   farqi        shundaki    , str   satrini   yoki   uning 
qismini   funksiyani   chaqiruvchi   satrning ko‘rsatilgan  
pos1 
o‘rnidan   boshlab   joylashtiradi.   Bunda   amal   chaqiruvchi   satrning   pos1   o‘rindan 
keyin joylashgan belgilar   o‘nga  
suriladi.  
Misol:  
char   *   sc;  
cin.getline (sc,100);   //”0123456789”   satri   kiritiladi  
unsigned int   i=3;  
string   s1,s,s2;  
s2=sc;   s1=”misollar”;   s=”xyz”;   //   s2=”0123456789”  
s2.insert(i,“abcdef”);   //   s2=”012abcdef3456789”   s1.insert(i-1,s2,4,5);   //  
s1=”mi45678sollar”  
s.insert(i-
2,sc,5);   //   s=”x01234yz”  
  Satr qismini   o‘chirish   funksiyasi  
Satr qismini   o‘chirish   uchun   quyidagi   funksiyani   ishlatish mumkin:  
erase(unsigned int   pos=0,unsigned int   n=npos);  
Bu   funksiya ,   uni   chaqiruvchi   satrning   pos   o‘rnidan   boshlab   n 
ta   belgini   o‘chiradi.   Agarda pos   ko‘rsatilmasa,   satr   boshidan       
boshlab   o‘chiriladi. Agar   n   ko‘rsatilmasa,   satrni   oxirigacha   bo‘lgan belgilar 
o‘chiriladi:  
string   s1,s2,s3;  
s1=”0123456789”;  
s2=s1;s3=s1;  
s1.erase(4,5);   //   s1=”01239”  
s2.erase(3);  
// s2=”012”   s3.erase();    
// s3=””  
void clear()   funksiyasi,   uni   chaqiruvchi   satrni   to‘liq tozalaydi.  
Masalan:  
s1.clear();   //satr   bo‘sh hisoblanadi (s1=””)  
   
Satr qismini   almashtirish   funksiyasi  
Bir   satr  
qismining   o‘rniga   boshqa satr   qismini   qo‘yish   uchun   quyidagi   funksiyalardan 
foydalanish mumkin:  
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);   Bu funksiyalar   insert        kabi        ishlaydi    , undan farqli   ravishda 
amal   chaqiruvchi   satrning   ko‘rsatilgan o‘rnidan   (pos1)   n1   belgilar  
o‘rniga   str   satrini   yoki   uning   pos2 o‘rindan   boshlangan   n2   belgidan   iborat 
qismini   qo‘yadi   (almashtiradi).  
Misol:  
char   *   sc=”0123456789”;  
unsigned int   i=3,j=2;  
string   s1,s,s2;  
s2=sc;   s1=”misollar”;   s=”xyz”;   //   s2=”0123456789”  
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)   funksiyasi   ikkita   satrlarni   o‘zaro   almashtirish 
uchun   ishlatiladi.   Masalan:  
string   s1,s2;  
s1=”01234”;   s2=”98765432”;  
s1.swap(s2);   //  
s2=”01234”   va s1=”98765432”   bo‘ladi.  
   
Satr qismini   ajratib   olish   funksiyasi  
Funksiya   prototipi   kuyidagicha:  
string   substr(unsigned int   pos=0,  
unsigned int   n=npos)const;  
Bu   funksiya ,   uni   chaqiruvchi   satrning   pos   o‘rnidan   boshlab   n belgini   natija 
sifatida   qaytaradi.   Agarda   pos   ko‘rsatilmasa,  
satr boshidan   boshlab   ajratib olinadi, agar n ko‘rsatilmasa,   satr 
oxirigacha   bo‘lgan   belgilar natija sifatida   qaytariladi:  
string   s1,s2,s3;  
s1=”0123456789”;  
s2=s1;   s3=s1;  
s2=s1.substr(4,5);   //   s2=”45678”   s3=s1.substr(3);        
//   s3=”3456789”  
// “30123456789”   satr   ekranga chiqadi  
cout<<s1.substr(1,3)+s1.substr();< b="">  
   
string   turidagi   satrni   char turiga o‘tkazish  
string   turidagi   satrni   char turiga   o‘tkazish   uchun  
const char   *   c_str()const;  
funksiyani   ishlatish kerak.   Bu  
funksiya char   turdagi   ‘\
0’   belgisi   bilan   tugaydigan   satrga   o‘zgarmas   ko‘rsatkichni   qaytaradi:  
shar   *s1;   string   s2=”0123456789”;  
s1=s2.c_str();  
Xuddi   shu   maqsadda       
const char   *   data()const;  
funksiyasidan   ham   foydalanish mumkin.   Lekin   bu funksiya satr       
oxiriga   ‘\0’   belgisini   qo‘shmaydi.  
Satr   qismini        izlash        funksiyalari      string   sinfida   satr qismini   izlash uchun har xil   variantdagi     funksiyalar 
aniqlangan.   Quyida   ulardan   asosiylarining   tavsifini  
keltiramiz.  
unsigned int   find(const string   &str,  
unsigned int   pos=0)const;  
Funksiya, uni   chaqirgan   satrning   ko‘rsatilgan   joydan 
(pos)   boshlab   str   satrni   qidiradi   va   birinchi   mos   keluvchi   satr  
qismining   boshlanish indeksini   javob   sifatida   qaytaradi , 
aks   holda   maksimal   musbat   butun   npos   sonni   qaytaradi  
(npos=4294967295
), agar izlash o‘rni   (pos)   berilmasa,   satr boshidan   boshlab   izlanadi.
</s1.substr(1,3)+s1.substr();<>
unsigned int   find(char   c.unsigned int   pos=0)const;  
Bu funksiya oldingidan   farqi   ravishda   satrdan s   belgisini   izlaydi.  
unsigned int   rfind(const string   &str, unsigned int   pos=npos)const;  
F
unksiya, 
uni   chaqirgan   satrning   ko‘rsatilgan   pos   o‘rnigacha   str   satrning   birinchi   uchragan   jo
yini        indeksini        qaytaradi    ,   aks  
holda   npos   qiymatini   qaytaradi,   agar pos   ko‘rsatilmasa satr oxirigacha   izlaydi.  
unsigned int   rfind(char   c.unsigned int   pos=npos)   const;  
Bu funksiyaning   oldingidan   farqi   -   satrdan   s   belgisi   izlanadi.   unsigned int   find_first_of(const string   &str,   unsigned int   pos=0)const;  
Funksiya, 
uni   chaqirgan   satrning   ko‘rsatilgan   (pos)   joyidan   boshlab   str   satrining   ixtiyoriy   bir
orta belgisini   qidiradi   va   birinchi  
uchraganining   indeksini ,   aks   holda npos   sonini   qaytaradi.  
unsigned int   find_first_of(char   c,   unsigned int   pos=0)const;  
Bu funksiyaning   oldingidan   farqi   -   satrdan   s   belgisini   izlaydi;  
unsigned int   find_last_of(const string   &str,   unsigned int   pos=npos)const;  
Funksiya, uni   chaqirgan   satrning   ko‘rsatilgan   (pos)   joydan   boshlab 
str   satrni   ixtiyoriy   birorta   belgisini   qidiradi   va o‘ng  
tomondan birinchi   uchraganining   indeksini,   aks   holda   npos   sonini   qaytaradi.  
unsigned int   find_last_of(char   c,   unsigned   int   pos=npos) const;  
Bu funksiya oldingidan   farqi   -   satrdan   s   belgisini   izlaydi;  
unsigned int   find_first_not_of(const string   &str,   unsigned int   pos=0)const;  
Funksiya, uni   chaqirgan   satrning   ko‘rsatilgan   (pos)   joydan   boshlab 
str   satrning   birorta   ham   belgisi   kirmaydigan   satr  
qismini   qidiradi   va   chap   tomondan 
birinchi   uchraganining   indeksini ,   aks   holda   npos   sonini   qaytariladi.  
unsigned int   find_first_not_of(char   c,   unsigned int   pos=0)const;  
Bu 
funksiyaning   oldingidan   farqi   -   satrdan   s   belgisidan   farqli   birinchi   belgini   izlaydi;   unsigned int   find_last_not_of(const string   &str,   unsigned int   pos=npos)const;  
Funksiya, uni   chaqiruvchi   satrning ko‘rsatilgan 
joydan   boshlab   str   satrini   tashkil   etuvchi   belgilar to‘plamiga   kirmagan  
belgini   qidi-
radi   va eng   o‘ng   tomondan birinchi   topilgan   belgining 
indeksini,   aks   holda   npos   sonini   qaytaradi.  
string   s1=”01234567893456ab2csef”,  
               
s2=”456”,s3=”ghk2”;  
  int   i,j;  
  i=s1.find(s2);  
  j=s1.rfind(s2);  
  cout<  
  cout<  
 
cout<<s1.find(‘3’)   <<="" b="">  
  cout<<s1.rfind(‘3’)   <<="" b="">  
  cout<<s1.find_first_of(s3)<<="" b="">  
  cout<<s1.find_last_of(s3)<<="" b="">  
  cout<<s1.find_first_not_of(s2)<<="" b="">  
  cout<<s1.find_last_not_of(s2)<<="" b="">  
}  
   
Satrlarni   solishtirish   </s1.find_last_not_of(s2)<</s1.find_first_not_of(s2)<</
s1.find_last_of(s3)<</s1.find_first_of(s3)<</s1.rfind(‘3’)   <</s1.find(‘3’)   <
Satrlar qismlarini   solishtirish uchun compare funksiyasi   ishlatiladi:  
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;  
Funksiyaning   birinchi   shaklida   ikkita   satrlar to‘la   solishtiri-ladi:   funksiya 
manfiy        son        qaytaradi    ,   agar        funksiyani        chaqiruvchi        satr str   satrdan   kichik   bo‘lsa,   0   qaytaradi   agar ular teng 
bo‘lsa   va   musbat   son        qaytaradi    , agar funksiya   chaqiruvchi   satr str  
satrdan   katta bo‘lsa.  
Ikkinchi   shaklda   xuddi   birinchidek   amallar   bajariladi , faqat funksiya 
chaqiruvchi   satrning   pos1   o‘rnidan   boshlab n1   ta  
belgili   satr   osti   str   satr bilan   solishtiriladi.  
Uchinchi   ko‘rinishda   funksiya   chaqiruvchi   satrning   pos1 o‘rnidan   boshlab   n1   ta 
belgili   satr qismi   va str   satrdan ros2  
o‘rnidan boshlab n2   ta   belgili   satr   qismlari   o‘zaro   solishtiriladi.  
Misol:  
#include    
int   main()   {  
  S
tring   s1=”01234567893456ab2csef”,   s2=”456”,  
               
s3=”ghk”;  
 
cout<<“s1=”<<s1<<endl;< b="">    
cout<<“s2=”<<s2<<endl;< b="">  
 
cout<<“s3=”<<s3<<endl;< b="">  
 
if(s2.compare(s3)>0)cout<<“s2>s3”<<endl;< b="">  
 
if(s2.compare(s3)==0)cout<<“s2=s3”<<endl;< b="">  
 
if(s2.compare(s3)<0)cout<<“s2<s3”<<endl;< b="">  
 
if(s1.compare(4,6,s2)>0)cout<<“s1[4-9]>s2”<<endl;< b="">  
  if(s1.compare(5,2,s2,1,2)==0)  
     
cout<<“s1[5-6]=s2[1-2]”<<endl;< b="">     }  
Masala.  
Familiya, ismi   va shariflari   bilan   talabalar 
ro‘yxati   berilgan.   Ro‘yxat   alfavit   bo‘yicha tartiblansin.  
Programma   matni:  
#include    
#include    
int   main(int   argc,   char*   argv[]){  
  const int   FISh_uzunligi=50;  
  string   *   Talaba;  
  char   *   Satr=(char*)malloc(FISh_uzunligi);  
  unsigned int   talabalar_soni;  
  char   son[3];  
  do   {  
    cout<<"Talabalar   sonini   kiriting:   ";  
    cin>>son;   }  
    while((talabalar_soni=atoi(son))<=0);     Talaba =new   string[talabalar_soni];  
  cin.ignore();  
  for(int   i=0; i<talabalar_soni;   i++)< span="">   {</talabalar_soni;   i++)<>  
    cout<<i+1<<"-talabaning   familya   ismi   sharifi:   ";< span=""></i+1<<"-
talabaning   familya   ismi   sharifi:   ";<>  
    cin.getline(Satr,50);  
    Talaba[i].assign(Satr);     }  
  bool almashdi=true;  
  for(int   i=0; i<="" b="">  
almashdi=false;  
    for(int   j=i;   j<="" b="">  
      if(Talaba[j].compare(Talaba[j+1])>0)       {  
        almashdi=true;  
        strcpy(Satr,Talaba[j].data());  
</endl;<></endl;<></s3”<<endl;<></endl;<></endl;<></s3<<endl;<></
s2<<endl;<></s1<<endl;<>         Talaba[j].assign(Talaba[j+1]);  
        Talaba[j+1].assign(Satr);         }     }  
  cout<<"Alfavit   bo'yicha tartiblangan   ro'yxat:\n";  
  for(int   i=0; i<talabalar_soni;   i++)< b="">  
    cout<<talaba[i]<<endl;< b="">  
  delete []   Talaba; free(Satr);   return   0;   }  
Programmada talabalar 
ro‘yxati   string   turidagi   Talaba   dinamik   massiv   ko‘rinishida   e’lon   qilingan   va 
uning   o‘lchami  
foydalanuvchi   tomonidan   kiritilgan talabar_soni   bilan   aniqlanadi. Talabalar 
sonini   kiritishda nazorat qilinadi:   klaviaturadan       
satr o‘qiladi   va u   atoi()   funksiyasi   yordamida   songa   aylantiriladi. 
Agar   hosil   bo‘lgan   son   noldan   katta son   bo‘lmasa,   sonni  
kiritish jarayoni   takrorlanadi. Talabalar soni   aniq 
bo‘lgandan   keyin   har   bir   talabaning   familiya,   ismi        va sharifi        bitta        satr       
sifatida   oqimdan o
‘qiladi. Keyin,   string   turida 
aniqlangan     compare()   funksiyasi   yordamida   massivdagi   satr-lar   o‘zaro  
solishtiriladi   va mos   o‘rindagi   belgilar 
kodlarini   o‘sishi   bo‘yicha   «pufakchali   saralash»   orqali   tartiblanadi.   Programma       
oxirida hosil   bo‘lgan   massiv   chop etiladi, hamda   dinamik   massivlar   yo‘qotiladi.      
Satr   xossalarini   aniqlash   funksiyalari  
string   sinfida   satr   uzunligi ,   uning   bo‘shligini   yoki   egallagan xotira 
hajmini   aniqlaydigan funksiyalar bor:  
unsigned int   size()const;   // satr  
o‘lchami  
unsigned int   length()const;   //   satr   elementlar   soni  
unsigned int   max_size()const;   // satrning   maksimal   uzunligi(4294967295)  
unsigned int   capacity()const;//   satr   egallagan   xotira hajmi  
bool empty()const;   //   true,   agar   satr   bo‘sh 
bo‘lsa   </talaba[i]<<endl;<></talabalar_soni;   i++)<>

String turidagi satrlar va ular ustida amallar. String turi qanday tur? String turi qanday masalalarni yechishga qo’llaniladi? String turini qanday standart funksiyalarini bilasiz?

String turi C++ tilida standart satr turiga qo‘shimcha sifatida string turi kiritilgan va u string sinfi ko‘rinishida amalga oshirilgan. Bu turdagi satr uchun ‘\0’ belgisi tugash belgisi hisoblanmaydi va u oddiygina belgilar massivi sifatida qaraladi. string turida satrlar uzunligining bajarila-digan amallar natijasida dinamik ravishda o‘zgarib turishi, uning tarkibida bir qator funksiyalar aniqlanganligi bu tur bilan ishlashda ma’lum bir qulayliklar yaratadi. #include satr toifasidagi o’zgaruvchilar ustida amallar bajarish uchun. string turidagi o‘zgaruvchilar quyidagicha e’lon qilinishi mumkin: string s1,s2,s3; Bu turdagi satrlar uchun maxsus amallar va funksiyalar aniq-langan. string satrga boshlang‘ich qiymatlar har xil usullar orqali berish mumkin: string s1=”birinchi usul”; string s2(”ikkinchi usul”); string s3(s2); string s4=s2; String turidagi satrlar ustidan amallar Amal Mazmuni Misol =, += Qiymat berish amali s=”satr01234” s+=”2satr000” + Satrlar ulash amali (konkantenatsiya) s1+s2 ==, !=, <, <=, >, >= Satrlarni solishtirish amallari s1==s2 || s1>s2 && s1!=s2

[] Indeks berish s[4] << Oqimga chiqarish sout << s >> Oqimdan o‘qish sin >> s (probelgacha) String first_name; // first_name — bu string turga ega bo'lgan o'zgaruvchi Satr massivi e’lon qilinishida satr oxiriga terminator qo’yilishini va natijada satrga qo’shimcha bitta bayt qo’shilishi inobatga olinishi kerak: char satr[10]; Ushbu e’londa satr satri uchun jami 10 bayt ajratiladi – 9 satr hosil qiluvchi belgilar uchun va 1 bayt terminator uchun. Satr o’zgaruvchilari e’lon qilinishida boshlang’ich qiymatlar qabul qilishi mumkin. Bu holda kompilyator avtomatik ravishda satr uzunligi hisoblaydi va satr oxiriga nol–terminatorni qo’shib qo’yadi: char Hafta_kuni[]=”Juma”; Ushbu e’lon quyidagi e’lon bilan ekvivalent: char Hafta_kuni[]= {‘J’,’u’,’m’,’a’,’\0’}; Satr qiymatini o’qishda oqimli o’qish operatori “>>” o’rniga getline() funktsiyasini ishltagan ma’qul hisoblanadi , chunki oqimli o’qishda probellar inkor qilinadi (garchi ular satr belgisi hisoblansa ham) va o’qilayotgan belgilar ketma– ketligi satrdan “oshib” ketganda ham belgilarni kiritish davom etishi mumkin. Natijada satr o’ziga ajratilgan o’lchamdan ortiq belgilarni qabul qilishi mumkin. Chu sababli , getline() funktsiyasi ikkita parametrga ega bo’lib, birinchi parametr o’qish amalga oshirilayotgan satrga ko’rsatgich, ikkinchi parametrda esa kiritilishi kerak bo’lgan belgilar soni ko’rsatiladi. Satrni getline() funktsiyasi orqali o’qishga misol ko’raylik: Programmada satr satri 5 ta belgini qabul qilishi mumkin , ortiqchalari tashlab yuboriladi. getline() funktsiyasiga murojaatda ikkinchi parametr qiymati o’qilayotgan satr uzunligidan katta bo’lmasligi kerak. Satr bilan ishlaydigan funktsiyalarning aksariyati string.h kutubxonasida jamlangan. Nisbatan ko’p ishlatiladigan funktsiyalarning tavsifini keltiramiz. 2.String turi qanday masalalarni yechishga qo’llaniladi?

Satr qiymatini biridan ikkinchisiga nusxalash mumkin. Buning uchun bir qator standart funktsiyalar aniqlangan bo’lib, ularning tavsiflari quyida keltiramiz. strcpy() funktsiyasi prototipi char* strcpy(char* str1, const char* str2) ko’rinishga ega va bu funktsiya str2 ko’rsatib turgan satrdagi belgilarni str1 ko’rsatib turgan satrga baytma-bayt nusxalaydi. Nusxalash str2 ko’rsatib turgan satrdagi nol-terminal uchraguncha davom etadi. Chu sababli, str2 satr uzunligi str1 satr uzunligidan katta emasligiga ishonch hosil qilish kerak, aks holda berilgan sohasida (segmentida) str1 satrdan keyin joylashgan berilganlar “ustiga” str2 satrning “ortiqcha” qnomi yozilishi mumkin. Navbatdagi programma qnomi “Satrni nusxalash!” satrini Str satrga nusxalaydi: char Str[20]; strcpy(Str, “Satrni nusxalash!”); Zarur bo’lganda satrning qaysidir joyidan boshlab , oxirigacha nusxadash mumkin. Masalan, “Satrni nusxalash!” satrini 8 belgisidan boshlab nusxa olish zarur bo’lsa, uni quyidagicha yechish mumkin: strncpy() funktsiyasining strcpy() funktsiyasidan farqli joyi shundaki, unda bir satrdan ikkinchisiga nusxalanadigan belgilar soni ko’rsatiladi. Uningsintaksisi quyidagi ko’rinishga ega: char* strncpy(char* str1, const char* str2, size_t num) Agar str1 satr uzunligi str2 satr uzunligidan kichik bo’lsa, ortiqcha belgilar “kesib” tashlanadi. strncpy() funktsiyasi ishlatilishiga misol ko’raylik: Programmada Uzun_str satri boshidan 4 belgi Qisqa_str satriga oldingi qiymatlar ustiga nusxalanadi va natijada ekranga 01234567890123456789 0123EF xabarlari chop etiladi. strdup() funktsiyasiga yagona parametr sifatida satr–manbaga ko’rsatgich uzatiladi. Funktsiya, satrga mos xotiradan joy ajratadi, unga satrni nusxalaydi va yuzaga kelgan satr-nusxa adresini qaytaradi. strdup() funktsiya sintaksisi: char*

strdup(const char* sourse) Quyidagi programma bo’lagida satr1 satrining nusxasi xotiraning satr2 ko’rsatgan joyida paydo bo’ladi: char* satr1=”Satr nusxasini olish.”; char* satr2; satr2=strdup(satr1); Satrlarni ulash ham foydalaniladi. Satrlarni ulash (konkatenatsiya) amali yangi satrlarni hosil qilishda keng qo’llaniladi. Bu maqsadda string.h kutubxonasida strcat() va strncat() funktsiyalari aniqlangan. strcat( ) funktsiyasi sintaksisi quyidagi ko’rinishga ega: char* strcat(char* str1, const char* str2) Funktsiya ishlashi natiajasida str2 ko’rsatayotgan satr, funktsiya qaytaruvchi satr – str1 ko’rsatayotgan satr oxiriga ulanadi. Funktsiyani chaqirishdan oldin str1 satr uzunligi, unga str2 satr ulanishi uchun yetarli bo’lishi hisobga olingan bo’lishi kerak. Quyida keltirilgan amallar ketma-ketligi bajarilishi natijasida satr satriga qo’shimcha satr ostilari ulanishi ko’rsatilgan: char satr[80]; strcpy(satr,”Bu satrga “); strcat(satr,”satr osti ulandi.”); Amallar ketma-ketligini bajarilishi natiajasida satr satri “Bu satrga satr osti ulandi.” qiymatiga ega bo’ladi. strncat( ) funktsiyasi strcat( ) funktsiyadan farqli ravishda str1 satrga str2 satrning ko’rsatilgan uzunligidagi satr ostini ulaydi. Ulanadigan satr osti uzunligi funktsiyaning uchinchi parametri sifatida beriladi. Funktsiya sintaksisi char* strncat(char* str1, const char* str2, size_t num) Pastda keltirilgan programma bo’lagida str1 satrga str2 satrning boshlang’ich 10 ta belgidan iborat satr ostini ulaydi: char satr1[80]=”Programmalash tillariga misol bu-“;