String turidagi satrlar va ular ustida amallar.


![[] 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?](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_3.png)
![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*](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_4.png)
![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-“;](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_5.png)
![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.](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_6.png)
![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](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_7.png)
![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;<>](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_8.png)
![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](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_9.png)
![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’;](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_10.png)
![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="">](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_11.png)
![}
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”;](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_12.png)

![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.](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_14.png)
![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](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_15.png)
![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<](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_16.png)
















![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="">](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_33.png)
![}
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);](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_34.png)
![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;<>](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_35.png)
![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](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_36.png)
![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++)<>](/data/documents/798f9630-6a41-46a1-be16-1771ac66b75d/page_37.png)
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-“;