Dasturlashda satrlar va ular bilan ishlash amallari
![DASTURLASH ASOSLARI VA TILLARI FANIDAN
“Dasturlashda satrlar va ular bilan ishlash amallari” mavzusida
KURS ISHI](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_1.png)
![MUNDARIJA.
KIRISH.....................................................................................................................................3
1.1. C++ DASTURLASH TILIDA SATR TURI VA ULARDAN FOYDALANISH
USULLARI.....................................................................................................................4
1.2. C++ DASTURLASH TILIDA STRING TURIGA MANSUB BO’LGAN SATRLI
O’ZGARUVCHILAR....................................................................................................24
XULOSA...................................................................................................................................32
FOYDALANILGAN ADABIYOTLAR ................................................................................33](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_2.png)
![KIRISH.
C++ dasturlash tili tarkibida satr, to’plam, fayl va struktura turiga mansub
bo’lgan ma‘lumotlar ustida amallar bajarish imkoniyati ham mavjud. Satr turi bu
dasturlashning asosiy turlaridan hisoblanadi, bunda char turiga mansub barcha
ma‘lumotlar shu tur asosida qayta ishlanadi. Dasturlash aoslarida satr turi bilan
ishlash bu fanning asosiy maqsadi hisoblanadi. Tashkilot va muassasalarning
axborotlarini qayta ishlash vaqtida uning tarkibida asosan satr turlari bilan ishlashga
to’g‘ri keladi. Bu bobda satrlar ustida satrning uzunligi, satrni nusxalash, satrni
kerakli joyga o’rnatish kabi bir qator vazifalar ko’rib o’tiladi. C++ dasturlash tilida
to’plam va fayl turlari ham asosiy turlardan hisoblanadi. Matematik masalalarni hal
etishda asosan to’plam turi katta ahmiyat kasb etadi. C++ dasturlash tilida to’plam,
to’plam elementlari, element to’plamga tegishli ekanligini aniqlash masalalarini hal
etish imkoniyati mavjud. Dasturlash asoslari fanida struktura turiga mansub bo’lgan
ma‘lumotlar katta ahamiyat kasb etadi. Struktura turidagi ma‘lumotlar tarkibida bir
nechta turlar birgalikda qaraladi, masalan, tashkilot xodimlari haqida ma‘lumotlar
struktura turiga tegishli bo’ladi. Struktura turiga e‘tibor qaratsak, bu tur
dasturlashning asosiy turlari hisoblanadi, bu tur asosan ma‘lumotlar bazasini
boshqarish tizimlarining asosi hisoblanadi. Yuqorida ko’rilgan turlar va ulardan
foydalanish imkoniyati C++ dasturlash tili tarkibida mavjud. Mazkur qullanmaning
joriy bobida yuqoridagi turlar va ulardan foydalanish usullari qarab o’tiladi.
C++ dasturlash tilida satr turi va ulardan foydalanish usullari va tamoyillarini
qarab o’tamiz. Satr turi bu belgilardan tashkil topgan ma‘lumotlar majmuasi
hisoblanadi. Satrlarning uzunligini aniqlash, satrlarni nusxalash, satrlarni kerakli
joyga o’rnatish kabi amallarni bajarish uchun C++dasturlash tilida keng imkoniyati
mavjud. C++ dasturlash tilida satrlar ham boshqa turlar kabi oldin dastur tarkibida
e‘lon qilinishi kerak. Satrlar e‘lon qilingandan keyin ular ustida amallar bajarish
mumkin.
C++ dasturlash tilida satrlar uchun standart turdan tashqari string turi ham
qushimcha sifatida qaralgan. String turiga mansub bo’lgan satrlar nol terminatori
bilan tugallanmasdan u oddiy belgilar massivi sifatida qaraladi. String turini
afzalliklari satrlar ustida amallar bajarilgandan So’ng dinamik ravishda o’zgartirishlar
mumkin.](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_3.png)
![1.1. C++ DASTURLASH TILIDA SATR TURI VA ULARDAN
FOYDALANISH USULLARI
Belgi va satrlar
C++ dasturlash tilida bir nechta turlardan foydalanish va ular ustida amallar
bajarish mimkin, dasturlash muhitida boshqa turlar kabi belgili turlar ham mavjud.
C++ dasturlash tilida belgili turlar char turiga mansub bo’lgan yagona elementli tur
hisoblanadi. C++ dasturlash tilida satrlar uchun alohida maxsus turlar ishlab
chiqilmagan satrlarni belgilar massivi sifatida ishlatish imkoniyati mavjud.
Ta‘rif: Alohida nom bilan saqlanuvchi bir nechta belgilardan tashkil topgan
belgilar majmuasi satr deyiladi.
Satrlarni belgilar massivi sifatida qarab ular ustida amallar bajarish mumkin.
C++ dasturlash tilida satrlar nol(‘\0‘) terminatori bilan tugaydi. Nol terminatori
bilan tugaydigan satrlar ASCIIZ –satrlari deyiladi.
Satrlardan foydalanish va ular ustida amallar bajarish uchun albatta oldin
ularni e‘lon qilish kerak. Satr turiga mansub bo’lgan o’zgaruvchilarni char
xizmatchi so’zi orqali e‘lon qilinadi. Satrlarni e‘lon qilish uchun quyidagi
dasturlarga etibor bering.
Yuqoridagi dastur tarkibida s[10] satr o’zgaruvchisi 9 ta elementga va
bitta nol terminatoriga mo’ljallangan. Satrlarni boshlang‘ich qiymatlarini berish
jarayonida uning elementlar sonini berish shart emas. Agar satrlarni elementlar
soni berilmasa dastur avtomatik ravishda uning elementlar soniga boshlang‘ich
qiymatdagi elementlar sonidan bitta ortiq qilib ta‘minlaydi, chunki oxiriga bitta nol#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[10]; // s satrli o’zgaruvchini e‘lon qilish
return 0;
}](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_4.png)
![terminatorini hisobga oladi. Doim satrlarni kiritishda uning elementlar soni e‘lon
qilinganidan oshib ketmasligi kerak aks holda faqat e‘lon qilingan elementlar
soniga teng elementlarni saqlab qolinib qolganlari olinmaydi.
Satrlarni kiritish jarayonida >> oqim bo’yicha kiritishdan foydalanmasdan
getline() funksiyasidan foydalanish maqsadga muvofiq bo’ladi. Agar oqim
bo’yicha kiritishdan foydalanilsa unda probellar inkor qilinib satrni ikkinchi
qismlari qabul qilinmaydi. getline(s,n) funksiyasi ikkita parametrni o’z ichiga
oladi, birinchisi s satr o’zgaruvchisi ikkinchisi n satr elementlar soni. Getline
funksiyasi satr elementlaridan ortiq qiymatlarni ham kiritish imkoniyatini yaratadi,
natijada satr elementlari ortadi. Kiritish jarayonini amalga oshirish uchun quyidagi
dasturlarga etibor bering.
Misol: Berilgan satrni ekranga chiqaring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[10]; // s satrli o’zgaruvchini e‘lon qilish
cin.getline(s,10);
cout<<s;
return 0;
}
Kiritish ma‘lumotlari
Absdefghl Dastur natijasi
Absdefghl
Yuqoridagi dastur tarkibidagi s satrli o’zgaruvchi faqat 9 ta elementni qbul
qiladi, agar 9 tadan ortiq bo’lsa natija qaytarmaydi.
Satr uzunligini aniqlash
Satrlar ustida amallar bajarish vaqtida albatta satrlarning uzunligi kerak
bo’ladi. Satr uzunligini aniqlash uchun string.h kutubhonasiga murojat qilish
kerak aksariyat satr uchun ishlatiladigan funksiyalarni string.h kutubhonasiga
murojat qilib ishlatishimiz mumkin. Satr uzunligini aniqlashni ikki hil usuli
mavjud.
-satr tarkibidagi mavjud elementlar sonini nol terminatorisiz aniqlash;
-satr tarkibidagi elementlarga ajratilgan sonini nol terminatori bilan aniqlash;](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_5.png)
![Satr tarkibidagi mavjud elementlar sonini nol terminatorisiz aniqlash
funksiyasining umumiy ko’rinishi quyidagicha bo’ladi.
strlen(<satrli o’zgaruvchi>);
Strlen funksiyasi o’z tarkibiga satrli o’zgaruvchi yoki satr uzini qabul qilishi
mumkin. Masalan strlen (―absd ) bo’lsa uning natijasi 4 ga teng bo’ladi.‖
Misol: Berilgan satr tarkibidagi elementlar sonini aniqlang..
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[10];
cin.getline(s,10);
x=strlen(s);
cout<<x;
return 0;
}
Kiritish ma‘lumotlari
Dastur Dastur natijasi
5
Demak strlen(s) funksiyasi s satrni tarkibidagi mavjud elementlari sonini
aniqlaydi.
Satr tarkibidagi elementlarga ajratilgan sonini nol terminatori bilan
aniqlash uchun sizeof(s) funksiyasidan foydaliniladi. Sizeof(s) funksiyasi s satr
uchun ajratilgan elementlar sonini aniqlaydi, s satrni 10 ta elementga moslab e‘lon
qilib lekin 5 ta element kiritilsa ham sizeof funksiyasi 10 qiymatni qaytaradi. Satr
tarkibidagi elementlarga ajratilgan sonini nol terminatori bilan aniqlash
funksiyasining umumiy ko’rinishi quyidagicha bo’ladi.
sizeof(<satrli o’zgaruvchi>);
Sizeof funksiyasi o’z tarkibiga satrli o’zgaruvchi yoki satr uzini qabul qilishi
mumkin. Masalan strlen (―absd )
‖ bo’lsa uning natijasi 5 ga teng bo’ladi.
Misol: Berilgan satr tarkibidagi elementlar sonini aniqlang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[10];](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_6.png)
![cin.getline(s,10);
x=sizeof(s);
cout<<x;
return 0;
}
Kiritish ma‘lumotlari
Salom Dastur natijasi
10
Demak sizeof(s) funksiyasi s satrni tarkibidagi mavjud elementlari sonini
emas balki unga ajratilgan qiymatni aniqlaydi. Agar sizeof funksiyasi tarkibida
o’zgaruvchi emas satr uzini kiritsa unda sizeof funksiyasi tarkibidagi
elementlardan bitta ko’p qiymatni qaytaradi chunki nol terminatorini ham
qo’shadi. Quyidagi dasturga e‘tibor bering.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ cout<<sizeof("dastur");
return 0;
}
Dastur natijasi
6
Misol: Berilgan s satr tarkibidan p element necha marta ishtirok etganligini
aniqlang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ int x,n=0;
char s[100];
cin.getline(s,10); //s satrni kiritish
char p;
cin>>p; //p belgini kiritish
x=strlen(s);
for(int i=0;i<=x-1;i++)
if(s[i]==p) n++;
cout<<n;](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_7.png)
![return 0;
}
Kiritish ma‘lumotlari
s=assalom
p=a Dastur natijasi
2
Satrlarni ixtiyoriy elementiga murojat qilish uchun doimo bitta kam qilib
buyruq berish kerak chunki satrlar belgili massiv bo’lganligi uchun boshlang‘ich
element nolinchi o’rindan boshlanadi.
Satrlarni nusxalash
C++ dasturlash tilida satrlarni bir biriga nusxalashni bir qancha usullari
mavjud. Satrlarni nusxalash uchun strcpy() funksiyasidan foydalanish mumkin,
strcpy() funksiyasining umumiy ko’rinishi quyidagicha bo’ladi.
strcpy(satr1, satr2);
strcpy(satr1, satr2) funksiyasi satr2 dagi elementlarni to’laligicha satr1 ga
nusxalaydi. Satr1 ni elementlar soni doimo satr2 elementlar sonidan katta bo’lishi
kerak.
Misol: Berilgan s satr elementlarini p satrga nusxalang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
char p[10];
strcpy(p,s);
cout<<p;
return 0;
}
Kiritish ma‘lumotlari
s=dastur Dastur natijasi
Dastur
Satrlarni nusxalash uchun strncpy() funksiyasidan foydalanish mumkin,
strncpy() funksiyasining umumiy ko’rinishi quyidagicha bo’ladi.
strncpy(satr1, satr2,n);](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_8.png)
![strncpy(satr1, satr2,n) funksiyasi satr2 dagi elementlarni n tasini satr1 ni
boshiga nusxalaydi. Strncpy() funksiyasini strcpy() funksiyasidan farqi satr2 ni nta
elementini satr1 ni boshiga nusxalaydi.
Misol: Berilgan s satrni 3 ta elementini p satrga nusxalang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
char p[10];
cin.getline(p,10);
strncpy(p,s,3);
cout<<p;
return 0;
}
Kiritish ma‘lumotlari
s=algoritm
p=dastur Dastur natijasi
Algtur
strncpy (st1, st2, n) funksiyasi. Bunda funksiya st1 satrining dastlabki n
ta belgisi ustiga st2 ning n dastlabki n ta belgisini nusxalaydi.
strdup (satr) funksiyasi. Funksiya xotiradan satr uchun joy ajratib, o’sha
joyga satr ni nusxalaydi.
Agar zarurat bo’lsa ko’rsatkichlardan foydalanib, satrning nechanchidir
belgisidan keyingilarini ham nusxalash mumkin. Quyidagi dastur bu
funksiyalar mohiyatini ochishga yordam beradi.
1 #include <iostream.h>
2 #include <string.h>
3 using namespace std;
4 int main()
5 { int i,j,n,m;
6 char*star1="Satr nusxasini olish";
7 char*satr2;
8 char str3[30]="Assalom", st1[20]="123456789 soni",
9 st2[26];
10 char*korsat=st1; cout<<korsat<<'\n';](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_9.png)
![11 korsat+=4; cout<<korsat<<'\n';
12 strcpy(st2, "nusxalashga misol"); cout<<st2<<'\n';
13 strncpy(st2, "soniga qarab nusxalash", strlen (str3)); cout<<st2<<'\n';
14 strncpy(st1, "dastlabki 4 belgini nusxalash",4); cout<<st1<<'\n';
15 satr2=strdup(satr1); cout<<satr2<<'\n';
16 s y ste 4 m (― pa u s e‖ ) ;
17 return 0;
18 }
Dastur natijasi quyidagicha bo’ladi:
123456789 soni
56789 soni
nusxalashga misol
soniga shga misol
dast 56789 soni
satr nusxasini olish
10-satrda «ko’rsat» nomli ko’rsatkichga st1 massivi qiymati
initsializatsiyalangan. 11-satrda korsar+=4; buyrug’i bilan ko’rsatkich
o’zgaruvchining qiymati 4 bayt o’ngga siljitildi. 12-satrda «nusxalashga
misol» matni strcpy( ) funksiyasi yordamida st2 masssiviga nusxalandi. 13-
satrdagi buyruq bo’yicha «soniga qarab nusxalash» matnining dastlabki 7 ta
belgisi st2 massivining dastlabki 7 ta belgisi o’rniga nusxalandi. Chunki
strlen(str3) funksiyaning qiymati 7 ga tengligini tushunish qiyin emas. 15-
satrdagi buyruq bo’yicha satr1 ko’rsatkichning qiymati satr2 ko’rsatkichga
nusxalandi.
Satrlarni ulash
Bir nechta satrlarni ulash natijasida yangi satrlarni hosil qilish mumkin. C++
dasturlash tili tarkibida satrlarni bir biriga ulashni bir nechta usullari mavjud,
satrlarni bir biriga ulab yangi satrlar hosil qilinadi.
C++ dasturlash tilida strcat() funksiyasi yordamida satrlarni bir biriga ulash
imkoniyati mavjud, strcat() funksiyasining umumiy ko’rinishi quyidagicha
ko’rinishda bo’ladi.
strcat(satr1, satr2);
C++ dasturlash tilida strcat(satr1, satr2) funksiyasi satr2 ni satr1ni oxiriga
ulaydi.
Misol: Berilgan s satrni p satrga birlashtiring.
#include <iostream.h>](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_10.png)
![#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
char p[10];
cin.getline(p,10);
strcat(p,s,3);
cout<<p;
return 0;
}
Kiritish ma‘lumotlari
s=ali
p=vali Dastur natijasi
Valiali
C++ dasturlash tilida strncat() funksiyasi yordamida satrlarni bir biriga faqat
n ta elementini ulash imkoniyati mavjud, strncat() funksiyasining umumiy
ko’rinishi quyidagicha ko’rinishda bo’ladi.
strncat(satr1, satr2,n);
C++ dasturlash tilida strncat(satr1, satr2, n) funksiyasi satr2 ni n ta
boshlang‘ich elementlarini satr1ni oxiriga ulaydi.
Misol: Berilgan s satrni boshidagi 3 ta elementini p satr oxiriga
birlashtiring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
char p[10];
cin.getline(p,10);
strncat(p,s,3);
cout<<p;
return 0;
}
Kiritish ma‘lumotlari Dastur natijasi](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_11.png)
![](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_12.png)
![s=algoritm
p=dastur Dasturalg
Satrlarni solishtirish (taqqoslash) funksiyalari
C++ da satrlarni solishtirish uchun quyidagi funksiyalardan foydalaniladi.
1. Strcmp (satr1, satr2) funksiyasi. Bu funksiya satr1 satrining har bir
belgisi satr2 satrining mos nomerlaridagi belgilarining EXM xotirasidagi
kodlarni solishtiradi.
Eslatma: Lotin alifbesining kichik harflari kodi katta harflari kodidan 32 ga
ortiq qilib kodlangan va solishtirish natijasi qandaydir n butun soniga qiymat
sifatida berilishi kerak. Masalan , n=strcmp (s1.s2)
Agar
s1>s2bo’lsa n>0
s1=s2bo’lsa n=0
s1<s2bo’lsa n<0 bo’ladi
n ning qiymati birinchi farq qiluvchi belgilar kodlarini solishtirish bilan
aniqlanadi.
satr1 va satr2 larning birinchi belgilari P va p larning kodlari farq qilayapti.
Shuning uchun dastur natijasi m=-1; n=1 kabi bo’lmoqda.
2. Agar satrlarni solishtirishda harflarning registrlarini (ya‘ni katta yoki
kichikligini) farqlash kerak bo’lmasa, u holda strcmpi (satr1, satr2)
funksiyasidan foydalaniladi. Bu hol quyidagi dasturda o’z aksini topgan.#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{
int j,i,s,n,m; char k1[20]="",k2[20]="";
char satr1[60]="Programmalash ";char *kor1=satr1;
char satr2[60]="prograMMalash ";char *kor2=satr2;
m=strcmp(kor1,kor2); cout<<" m="<<m;
n=strcmp(kor2,kor1); cout<<" n="<<n<<'\n';
system("pause");
return 0;
}
#include <iostream.h>](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_13.png)
![#include <string.h>
using namespace std;
int main()
{
int j,i,s,n,m;
char satr1[60]="Programmalash ";char *kor1=satr1;
char satr2[60]="prograMMalash ";char *kor2=satr2;
char satr3[60]="pragraMMalash ";char *kor3=satr3;
m=strcmpi(kor1,kor2); cout<<" m="<<m;
n=strcmpi(kor2,kor3); cout<<" n="<<n<<'\n';
system("pause");
return 0;
}
Dastur natijasi m=0, n=1 kabi bo’lishini tushunish qiyin emas.
3. Agar ikkita satrning faqat dastlabki n ta belgilarini solishtirish talab etilgan
bo’lsa, strncmp(satr1, satr2,n) funksiyasidan foydalaniladi. Quyidagi dasturni
tahlil qilib bunga ishonch hosil qilish mumkin.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{
int j,i,s,n,m;
char satr1[60]="programmalash ";char *kor1=satr1;
char satr2[60]="prograMMalash ";char *kor2=satr2;
m=strncmp(kor1,kor2,6); cout<<" m="<<m;
n=strncmp(kor1,kor2,7); cout<<" n="<<n<<'\n';
system("pause");
return 0;
}
Dastur natijasi m=0, n=32 kabi bo’ladi.
Misol. Ikkita satr berilgan. Ularning farq qiluvchi belgilarini aniqlash
dasturini tuzing.
#include <iostream.h>
#include <string.h>](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_14.png)
![](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_15.png)
![Dastur natijasi quyida kltirilgan. Mustaqil tahlil qiling.
1- chi belgisi har xil, ular: p va P
5-chi belgisi har xil, ular: o va r
8-chi belgisi har xil, ular: a va f
25-chi belgisi har xil, ular: R va r
26-chi belgisi har xil, ular: c va g
32-chi belgisi har xil, ular: Z va z
Satrdagi harflar registrini almashtirish funksiyalari
Agar satrdagi belgilari ichida harflar bo’lsa, ularni bosh harflardan kichik
harflarga almashtirsh uchun strlwr(satr) funksiyasidan, aksincha kichik harflarni
bosh harflarga almashtirish uchun esa strupr(satr) funksiyasidan foydalaniladi.
Masalan using namespace std;
int main()
{
int j, i, s, n, m; char k1[20]="", k2[20]="";
char satr1[60]="progoamalash tillarini oRcanamiZ"; char
*kor1=satr1;
char satr2[60]="Programflash tillarini organamiz"; char
*kor2=satr2;
for(i=1; i<=32; i++) {
strncpy(k1, kor1, 1);strncpy(k2, kor2, 1); kor1+=1; kor2+=1;
n=strcmp(k1, k2);
if(n!=0) cout<<i<<"-chi belgisi har xil, ular: "<<k1<< " va "
<<k2<<'\n';
}
system("pause");
return 0;
}
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{
char satr2[30]="maktabda o’qiyman";
strupr(satr2);](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_16.png)
![cout<<satr2<<'\n';
char satr3[30]="MEN TALABAMAN";
strlwr(satr3);
cout<<satr3<<'\n';
system("pause");
return 0;
}
Dastur natijasi MAKTABDA O’QIYMAN
men talabaman
kabi bo’ladi
Satrlarni teskari tartiblash
Satrlarni teskari tartiblash uchun C++ dasturlash tilidan tashqari boshqa
dasturlash tillarida takrorlanish jarayonlari orqali bajariladi. C++ dasturlash tilida
satrlarni teskari tartiblash uchun strrev() funksiyasi yordamida bajarish mumkin.
Strrev() funksiyasining umumiy ko’rinishi quyidagicha bo’ladi.
strrev(<satrO’zgaruvchisi>);
Strrev(s) funksiyasi s satrni teskari tartibda jaoylashtiradi.
Misol: Berilgan s satrni teskari tartiblang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
cout<<strrev(s);
return 0;
}
Kiritish ma‘lumotlari
s=algoritm Dastur natijasi
Mtirogla
Satrdan belgini izlash
Satr tarkibidan birorta belgini qidirish uchun C++ dasturlash tilining string.h
kutubxonasi ichidan strchr() funksiyasidan foydalanish kerak. Strchr()
funksiyasining umumiy ko’rinishi quyidagicha bo’ladi.
strchr(<s,p>);](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_17.png)
![Strchr(s) funksiyasi s satr ichida p belgini izlaydi agar topilsa shu
elementdan keyingi qismni aks holda nullni qaytaradi.
Misol: Berilgan s satrdan p belgini qidiring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
char p; cin>>p;
cout<<strchr(s,p);
return 0;
}
Kiritish ma‘lumotlari
s=algoritm
p=t Dastur natijasi
Tm
Satr ichidan satr qismini izlash
Satr tarkibidan birorta qism satrni qidirish uchun C++ dasturlash tilining
string.h kutubxonasi ichidan strstr() funksiyasidan foydalanish kerak. Strstr()
funksiyasining umumiy ko’rinishi quyidagicha bo’ladi.
strstr(<s,p>);
Strstr(s) funksiyasi s satr ichida p qism satrni izlaydi agar topilsa shu satrdan
keyingi qismni aks holda nullni qaytaradi.
Misol: Berilgan s satrdan p satrni qidiring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,100);
char p[100];
cin.getline(p,100);
cout<<strstr(s,p);
return 0;
}](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_18.png)
![Kiritish ma‘lumotlari
s=aliakbar
p=ak Dastur natijasi
Akbar
Satr turini o’zgartiruvchi funksiyalar
Ko’pincha sonlarni qayta ishlashni talab qiluvchi masalalarda sonni matematik
almashtirishlardan foydalanib qayta ishlagandan ko’ra uni satr ko’rinishda qayta
ishlab, keyin satrni songa aylantirib qo’yish ancha qulay bo’ladi. Buning uchun C+
+ dagi <stdlib.h> funksiyalar kutubxonasidagi quyidagi funksiyalardan
foydalaniladi.
1. atoi(satr) funksiyasi. Bu funksiya turi butun (int) bo’lib, satr ko’rinishida
berilgan sonni butun turga aylantiradi. Satrni to’liq songa aylantirish uchun
satrning belgilari to’liq raqamlar bo’lishi kerak. Agar satrning boshidagi bir nechta
belgilarigina raqamlardan iborat bo’lsa, atoi() funksiyasi faqat shu qismini songa
aylantiradi va qolgan qismini tashlab yuboradi. Agar satr raqam bilan
boshlanmagan bo’lsa, funksiya 0(nol) ga teng qiymatni oladi. Yuqorida keltirilgan
fikrlarni quyidagi dastur misolida tahlil qiling.
#include <iostream.h>
#include <stdlib.h>
using namespace std;
int main()
{
int i,j,k,n,m;
char satr1[30]="215625", satr2[30]="25";
char satr3[30]="2154254254698",
satr4[30]="7458TALA215AN",satr5[]="assalom";
k=atoi(satr1); n=atoi(satr2); i=atoi(satr3); j=atoi(satr4);
m=atoi(satr5);
cout<<"i="<<i<<"\nj="<<j<<'\n';
cout<<"k="<<k<<"\nn="<<n5<<'\n';
cout<<"m="<<m<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi
i=-1819327894](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_19.png)
![](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_20.png)
![Satrni songa aylantirishda son tur chegarasidan chiqib ketsa C++ kutilmagan
natijani chop etadi. Masalan, dastur i paramatri uchun shunday qiymat tanlangan.
2. atof(satr) funksiyasi. Bu funksiya ham atoi() funksiyasi kabi ishlaydi. Faqat
bu funksiyaning qiymati long turiga mansub bo’ladi. Bundan tashqari funksiyaga
float yoki double turi berilsa, satr ko’rinishidagi sonni double ko’rinishidagi,
ya‘ni sonning mantissasi va tartibini ko’tsatish bilan yoki o’nli kasr ko’rinishiga
o’tkazadi. Agar songa aylantirilayotgan satr chegaradan chiqib ketsa, funksiya
kutilmagan qiymatni oladi.
#include <iostream.h>
#include <stdlib.h>
using namespace std;
int main()
{
int k,n,m; double i,j ;
char satr1[]="3.14D15E+2";
char satr3[30]="21.34254254E15", satr4[30]="745.8215";
n=atoi(satr1); i=atof(satr3); j=atof(satr4);
cout<<"i="<<i<<"\nj="<<j<<<<"\nn="<<n<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi
i=2.13425e+016
j=745.822
n=3
3. itoa (n,satr,m) funksiyasi. Bu funksiya int turiga mansub bo’lgan n sonini m
lik sanoq sistemasiga o’tkazib, satr turiga o’tkazadi va hosil bo’lgan qiymatni
satrli massivga beradi.
ltoa (n,satr,m) funksiyasi vazifasi ham itoa() funksiyasi vazifasi kabi. Faqat
ltoa() funksiyasi long turiga mansub sonlarni ham satrga aylantiradi. Quyidagi
dasturni tahlil qilib, bunga ishonch hosil qilish mumkin. j=7458
k=215625
n=25
m=0
#include <iostream.h>](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_21.png)
![#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
int n=3245,m; long int i,j=568324557; long double k=5.6e4;
char satr1[20],satr2[20],
satr3[20],satr4[20],satr5[20],satr6[20],*satr7;
itoa(n,satr1,2); itoa(n,satr2,8);itoa(n,satr3,16);itoa(n,satr4,10);
cout<<"satr1="<<satr1<<"\nsatr2="<<satr2<<"\nsatr3="<<satr3<<"\nsa
tr4="<<satr4<<'\n';
ltoa(j,satr1,2); ltoa(k,satr2,8);ltoa(j,satr3,16);ltoa(j,satr4,10);
cout<<"satr1="<<satr1<<"\nsatr2="<<satr2<<"\nsatr3="<<satr3<<"\nsatr4
="<<satr4<<'\n';
itoa(n,satr5,10);ltoa(j,satr6,10);satr7=strstr(satr6,satr5);cout<<"
satr7="<<satr7<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi.
satr1=110010101101
satr2=6255
satr3=cad
satr4=3245
satr1=100001110111111111000111001101
satr2=155300
satr3=21dff1cd
satr4=568324557
satr7=324557
4. gcvt (son,raqamlar soni, satr) funksiyasi. Bu funksiya float yoki doudle
turidan sonni satrga aylantiradi. Bunda son float yoki double turiga mansub son
bo’lilshi kerak, raqamlar soni satrga aylantirilgan sonning raqamlar soni. Agar
sonning raqamlari soni ko’rsatilgan sondan ortiq bo’lsa, quyidagi ikki hol bo’lishi
mumkin.
1) Butun son berilgan bo’lsa, unEm ko’rinishida ifodalanadi;
2) O’nli kasar ko’rinishida bo’lsa, ortiqcha raqamlari
yaxlitlanadi. Quyidagi dasturda bu imkoniyatlar o’z aksini topgan](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_22.png)
![](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_23.png)
![#include <iostream.h>
#include <stdlib.h>
using namespace std;
int main()
{
int n=4; double i=4562, m=1234567,k=12.455476;
char satr[20];
gcvt(i,n,satr);cout<<"i ning satr korinishi="<<satr<<'\n';
gcvt(m,n,satr);cout<<"m ning satr korinishi="<<satr<<'\n';
gcvt(k,n,satr);cout<<"k ning satr korinishi="<<satr<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi.
i ning satr korinishi=4562
m ning satr korinishi=1.235e+006
k ning satr korinishi=12.46](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_24.png)
![1.2. C++ DASTURLASH TILIDA STRING TURIGA MANSUB BO’LGAN SATRLI
O’ZGARUVCHILAR
String turidagi o’zgaruvchilarni e’lon qilish
C++ dasturlash tilida string turidagi o’zgaruvchilarni e‘lon qilish uchun
string xizmatchi so’zi orqali amalga oshiriladi.
string s,s1;
String turiga mansub bo’lgan satrlar ustida amallar bajarish imkoniyati C++
dasturlash tilida keng imkoniyatga ega. C++ dasturlash tilida string turiga mansub
bo’lgan satrlarni boshlang‘ich qiymatlarini bir nechta usullarda berish mumkin.
String turidagi satrlarni boshlang‘ich qiymatlarini berish jarayonini quyidagi dastur
orqali qaraymiz:
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ string s,s1; // s va s1 larni e‘lon qilish
s="dastur"; // s ni boshlang‘ich qiymatini berish](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_25.png)
![String turidagi satrlar ustida amallar bajarish uchun uning elementlari bilan
ishlashga to’g‘ri keladi. String turidagi satrlarni har bir elementlariga murojat
qilish uchun at() funksiyasi yoki oddiy [] elementga murojat qilish orqali murojat
qilinadi. Masalan s.at(3) s satrning uchinchi elementiga murojat qilinadi. s.at(3) va
s[3] holatlari teng kuchli hisoblanadi.
Satrlarni ixtiyoriy elementiga murojat qilish uchun doimo bitta kam qilib
buyruq berish kerak, chunki satrlar belgili massiv bo’lganligi uchun boshlang‘ich
element nolinchi o’rindan boshlanadi.
Misol: Berilgan satrni ixtiyoriy elementini ekranga chiqaring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ string s; int n;
cin>>s; cin>>n;
cout<<s.at(n-1);
return 0;
}
Kiritish ma‘lumotlari
s=dastur
n=3 Dastur natijasi
S
Demak, satrlarni yuqoridagi qoidalarga asoslanib e‘lon qilib uning ixtiyoriy
elementlariga ta‘sir qilish mumkin.
String turdagi satrlar ustida amallar bajarish
C++ dasturlash tilida string turdagi satrlar ustida bir nechta amallar bajarish
mumkin. String satrlarini char tipidagi satrlardan afzalliklari bir qancha amallarni
bajarish inkoniyati kengdir. C++ dasturlash tilida string satrlari ustida quyidagi
amallarni bajarish mumkin:
Amal Mazmuni Misol
=,+= Qiymat berish amaliS= ‖d
a s tu r ; ‖
s
+= ‖a b s d ;‖
s1=s;s1=s; // s1 ni boshlang‘ich qiymatini berish
return 0;
}](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_26.png)
![+ Satrlarni ulash s=s+s1
==,!=,<,>,<=,>= Satrlarni solishtirish amallari
s==s1
s>=s1
s==s1 && s<s1
[] Indeks berish s[2]
<< Oqimga chiqarish cout<<s;
>> Oqimdan o’qish cin>>s1;
String turidagi satrlarni nusxalash
String turidagi satrlarni nusxalash uchun assign() funksiyasidan
foydalaniladi. Assign() funksiyasining umumiy ko’rinishi quyidagicha bo’ladi:
<s1>.assign(<s2>);
Assign funksiyasi s2 satrni s1 satrga nusxalash amalini bajaradi.
Misol: s2 satrni s1 satrga nusxalash amalini bajaring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ string s1,s2;
cin>>s2;
s1.assign(s2); // s1=s2 amaliga teng kuchli
cout<<s1;
return 0;
}
Kiritish ma‘lumotlari
S2=dastur Dastur natijasi
Dastur
Bu funksiyaning quyidagi ko’rinishlaridan foydalaniladi.
a) satr2. assign (satr1); ko’rinishi. Bu holda funksiya satr1ni to’liq satr2 ga
nusxalaydi. Agar satr2 initsializatsiyalangan bo’lsa ham uning oldingi qiymati
unutiladi.
b) satr2. assign (satr1,n,m); ko’rinishi. Ushbu variantida funksiya satr1ning
n- belgisidan keyingi m ta belgisini satr2 ga nusxalaydi.n-belgisi kirmaydi.
c) satr2. assign (satr1,n); ko’rinishi. Bu holda satr1 char turli satrli massiv
bo’lishi kerak. Funksiya char turli massivni string turiga aylantirib, uning dastlabki](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_27.png)
![](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_28.png)
![n ta belgisini satr2 ga nusxalaydi. Barcha variantlaridan foydalanish usullari
quyidagi dasturda o’z aksini topgan.
Satrning biror qismidan nusxa olish funksiyasi
Bu amalni bajarish uchun satr1.substr(n,m) funksiyasidan foydalaniladi.
Funksiyaning quyidagicha ko’rinishlari mavjud.
a) satr1.substr(n,m). Bunda satr1 qismidan nusxa olinayotgan satr bo’lib,
funksiya shu satrning n -belgisidan keyingi m ta belgisidan nusxa oladi;
b) satr1.substr(n) ko’rinishida foydalanilsa satr1 satrning n -belgisidan
oxirigacha nusxa olinadi;
c) satr1.substr() ko’rinishidan foydalanilganda esa satr1 dan to’liq nusxa
olinadi. Bu holda funksiyaning qiymati qandaydir string turli o’zgaruvchiga
berilishi kerak.
Satrning oxiriga boshqa satrni o’rnatish
String turidagi satrni qismiga boshqa satrni o’rnatish uchun append()
funksiyasidan foydalaniladi. append() funksiyasining umumiy ko’rinishi
quyidagicha bo’ladi.
s1.append(s2,n,m);
Append funksiyasi s2 satrni n-elementidan m ta elementni s1 satr oxiriga
o’rnatish amalini bajaradi.
Misol: s2 satrni ikkinchi elementidan uchtasini s1 satrga o’rnating amalini
bajaring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ string s1,s2;
cin>>s1; cin>>s2;
s1.append(s2,2,3);
cout<<s1;
return 0;
}
Kiritish ma‘lumotlari
S1=dastur
S2=amal Dastur natijasi
Dastural
S2 satrning ikkinchi elementida a joylashgan, chunki satr nolinchidan
boshlangan.
Bu funksiyani quyidagi ko’rinishlari mavjud:](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_29.png)
![a) satr2. append (satr1); ko’rinishidan foydalanilganda satr2 ning oxiridan
satr1 ulanadi. Agar satr2 initsializatsiya qilinmagan bo’lsa, satr2 o’zgaruvchi satr1
o’zgaruvchining qiymatini oladi;
b) satr2. append (satr1,n,m); ko’rinishidan foydalanilganda satr1ning n –
belgisidan keyingi m ta belgisi satr2 ning oxiridan ulanadi;
c) satr2. append (satr1,n); ko’rinishidan foydalanilganda satr1 char turli
massiv bo’lishi kerak. Funksiya char turli satr1ni string turga aylantirib, uning
dastlabki n ta belgisini satr2 oxiridan ulaydi.
Funksiyaning vazifasini o’zlashtirish uchun quyidagi dastur va uning
natijasini tahlil qiling.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ int j,i,s,n,m;
string s1="matnniulash",s3,s4="bo’lakni",s5,s7="bizning
",s2="matnga ";
char s6[]="assalom"; s2.append(s1);cout<<"s2="<<s2<<'\n';
s3.append(s1);cout<<"s3="<<s3<<'\n';
s4.append(s1,6,6);cout<<"s4="<<s4<<'\n' ;
s5.append(s6,4);cout<<"s5="<<s5<<'\n';
s7.append("maktabdosh",6);cout<<"s7="<<s7<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi
s2=matnga matnni ulash
s3=matnni ulash
s4=bo’lakni ulash
s5=assa
s7=bizning maktab
Satr tarkibiga boshqa satrni joylashtirish
String turidagi satrni qismiga boshqa satrni o’rnatish uchun insert()
funksiyasidan foydalaniladi. insert() funksiyasining umumiy ko’rinishi
quyidagicha bo’ladi.
satr2.insert (n,satr1,m,k)
Funksiyaning quyidagi ko’rinishlaridan foydalaniladi:](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_30.png)
![a) satr2.insert (n,satr1); ko’rinishidan foydalanilganda funksiya satr2 ning n -
o’rnidan boshlab satr1 ni joylashtiradi.
b) satr2.insert (n,satr1,m,k); ko’rinishidan foydalanilganda funksiya satr2
ning n - belgisidan keyin satr1 ning m -belgisidan keyingi k -ta belgisini
joylashtiradi. m - belgisi kirmaydi.
s) satr2.insert (n,satr1,m); ko’rinishidan foydalanilganda funksiya satr2 ning
n-b elgisidan keyin satr1 ning dastlabki m ta belgisini joylashtiradi. Maslan,
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ int j,i,s,n,m;
string s1=" matnni joylash",s3,s4="bo’lakni",s5="tezroq ",s7="bizning
",s2="matnga ";
char s6[]="bo’ladi"; s2.insert(6,s1);cout<<"s2="<<s2<<'\n';
s4.insert(6,s1,10,4);cout<<"s4="<<s4<<'\n' ;
s5.insert(3,s6,4);cout<<"s5="<<s5<<'\n';
s7.insert(3," maktabdosh",7);cout<<"s7="<<s7<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi
s2=matnga matnni joylash
s4=bo’lakylasni
s5=tezbo’lroq
s7=biz maktabning
Satr qismini o’chirish
String turidagi satrni qismini o’chirish uchun erase() funksiyasidan
foydalaniladi. erase () funksiyasining umumiy ko’rinishi quyidagicha bo’ladi:
s1.erase(n,m);
Erase funksiyasi s1 satrni n-elementidan m ta elementni o’chirish amalini
bajaradi.
Misol: s1 satrni ikkinchi elementidan uchtasini o’chirish amalini bajaring.
#include <iostream.h>
#include <string.h>](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_31.png)
![using namespace std;
int main()
{ string s1;
cin>>s1;
s1.erase(2,3);
cout<<s1;
return 0;
}
Kiritish ma‘lumotlari
S1=dastur Dastur natijasi
Dar
Matn qismini boshqa matn qismi bilan almashtirish funksiyasi
Bu amalni bajarish uchun satr1.replace(n,m,satr2,i,j) funksiyasidan
foydalaniladi. Funksiyaning quyidagicha ko’rinishlari mavjud.
a) satr1.replace(n,m,satr2); ko’rinishidan foydalanilganda satr1 ning n -
belgisidan keyingi m ta belgisi satr2 bilan almashtiriladi.
b) satr1.replace(n,m,satr2,i,j); ko’rinishidan foydalanilganda satr1 ning n -
belgisidan keyingi m ta belgisi satr2 ning i -belgisidan keyingi j ta belgisi bilan
almashtiriladi.
s) satr1.replace(n,m,satr2,k); ko’rinishidan foydalanilganda satr1 ning n -
belgisidan keyingi m ta belgisi satr2char turli massivning dastlabki k ta
belgisidan tashkil topgan qismini string turiga aylantirib almashtiriladi. Quyidagi
dasturni tahlil qilish bilan bu fikrlarga ishonch hosil qilish mumkin.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s4[]="bo’lmaydi";
string s1="matn bo’lagini almashtirish",s2="bugun dars bo’ladi";
string s3="nima"; s1.replace(5,9,"qismini");cout<<"s1="<<s1<<'\
n'; s1.replace(4,8,s3,0,2);cout<<"s1="<<s1<<'\n' ;
s2.replace(11,7,s4,9);cout<<"s2="<<s2<<'\n';
system("pause");
return 0;}
Dastur natijasi quyidagicha bo’ladi](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_32.png)
![](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_33.png)
![Satr tarkibidan satr qismini izlash
String turidagi satrni tarkibidan satr qismini izlash uchun find()
funksiyasidan foydalaniladi. find () funksiyasining umumiy ko’rinishi quyidagicha
bo’ladi:
s1.find(s2);
Find funksiyasi s1 satr ichidan s2 satrni izlash amalini bajaradi, agar topilsa,
s2 ning boshlanish indeksini saqlaydi aks holda -1 natija qaytaradi.
Misol: s1 satr tarkibidan s2 satrni izlash amalini bajaring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ int i;
string s1,s2;
cin>>s1; cin>>s2;
i=s1.find(s2);
cout<<i;
return 0;
}
Kiritish ma‘lumotlari
S1=dastur
S2=tur Dastur natijasi
3
Agar satr tarkibida izlanadigan qism bir necha marta bajarilsa, oxirgi
qismning indeksini aniqlash uchun rfind() funksiyasidan foydalaniladi. Rfind()
funksiyasini ishlash jarayoni find() funksiyasini ishlash jarayoni bilan bir xil.
Satrlarni solishtirish funksiyalari
Satrlarni solishtirish funksiyalari satrdagi belgilarning kodlari bo’yicha
solishtiradi. Shuning uchun dastlab klavituradagi ko’p foydalaniladigan
belgilarning kodlarini aniqlash dasturini va uning natijasini keltiramiz. s1=matn qismini almashtirish
s1=matnni almashtirish
s2=bugun dars bo’lmaydi
#include <iostream.h>
#include <string.h>
using namespace std;](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_34.png)
![int main()
{ int x,y,z,n,m,t,i;
char
a[40]="ABCDEFGHIJKLMNOPQRSTUVWXYZ",b[30]="abcdefghijklmnopq
rstuvwxyz";
char c[40]="0123456789 !@#$%&*()+-=;,?^<>\/,.:";
for(i=0;i<=32;i++) {x=(int)a[i];y=(int)b[i];z=(int)c[i]; if(i<=25)
{cout<<" "<<a[i]<<" ning kodi="<<x<<" "<<b[i]<<" ning
kodi="<<y;
cout<<" "<<c[i]<<" ning kodi="<<z<<'\n';} else cout<<" "<<c[i]<<"
ning kodi="<<z<<'\n';}
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi
A ning kodi=65 a ning kodi=97 0 ning kodi=48 ^ ning kodi=94
B ning kodi=66 b ning kodi=98 1 ning kodi=49 < ning kodi=60
C ning kodi=67 c ning kodi=99 2 ning kodi=50 > ning kodi=62
D ning kodi=68 d ning kodi=100 3 ning kodi=51 / ning kodi=47
E ning kodi=69 e ning kodi=101 4 ning kodi=52 , ning kodi=44
F ning kodi=70 f ning kodi=102 5 ning kodi=53 . ning kodi=46
G ning kodi=71 g ning kodi=103 6 ning kodi=54 : ning kodi=58
H ning kodi=72 h ning kodi=104 7 ning kodi=55
I ning kodi=73 i ning kodi=105 8 ning kodi=56
J ning kodi=74 j ning kodi=106 9 ning kodi=57
K ning kodi=75 k ning kodi=107 probel ning kodi=32
L ning kodi=76 l ning kodi=108 ! ning kodi=33
M ning kodi=77 m ning kodi=109 @ ning kodi=64
N ning kodi=78 n ning kodi=110 # ning kodi=35
O ning kodi=79 o ning kodi=111 $ ning kodi=36
P ning kodi=80 p ning kodi=112 % ning kodi=37
Q ning kodi=81 q ning kodi=113 & ning kodi=38
R ning kodi=82 r ning kodi=114 * ning kodi=42
S ning kodi=83 s ning kodi=115 ( ning kodi=40
T ning kodi=84 t ning kodi=116 ) ning kodi=41
U ning kodi=85 u ning kodi=117 + ning kodi=43
V ning kodi=86 v ning kodi=118 - ning kodi=45](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_35.png)
![W ning kodi=87 w ning kodi=119 = ning kodi=61
X ning kodi=88 x ning kodi=120 ; ning kodi=59
Y ning kodi=89 y ning kodi=121 , ning kodi=44
Z ning kodi=90 z ning kodi=122 ? ning kodi=63
Satrlarni solishtirishda compare funksiyasining quyidagi bir nechta
ko’rinishlaridan foydalaniladi.
s=satr1.compare (satr2);
Bunda satr1 va satr2 lar solishtiriladi. Agar
satr1> satr2 bo’lsa s>0
satr1= satr2 bo’lsa s=0
satr1 <satr2 bo’lsa s<0
bo’ladi. Satrlarni solishtirishda, ularning mos nomerlaridagi belgilarining
ASCII kodlari solishtirilib ketilaveradi. Qaysidir nomerli belgilari bir-biridan farq
qilsa va ulardan qaysi birining kodi katta bo’lsa, o’sha satr katta hisoblanadi.
a) s=satr1.compare (n,m,satr2); ko’rinishidan foydalanilganda satr1 ning n -
nomeridan keyingi m ta belgilari ketma-ketligi satr2 bilan solishtiriladi.
b) s=satr1.compare (n,m,satr2,i,j); ko’rinishidan foydalanilganda satr1 ning
n -belgisidan keyingi m ta belgilari ketma-ketligi satr2 ning i -belgisidan keyingi j
ta belgilari ketma-ketligi bilan solishtiriladi.
Solishtirish funksiyasining imkoniyatlarini quyidagi dastur misolida namoyish
qilamiz.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ int x,y,z,n,m,t,s5,s6,s7,s8;
string s1="daraja ko’rsatkichida",s2="ABCDEF",s3="ABCD";
string s4="daraja ko’rsat",s9="ab",s10="aa3-";
s5=s2.compare(s3); cout<<"s5="<<s5;
s6=s2.compare(s1); cout<<" s6="<<s6;
s8=s9.compare(s10); cout<<" s8="<<s8;
s7=s1.compare(s4); cout<<" s7="<<s7<<'\n';
x=s1.compare(0,14,s4); cout<<" x="<<x;
y=s2.compare(0,5,s3); cout<<" y="<<y;
z=s1.compare(1,4,s4,1,4); cout<<" z="<<z;](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_36.png)
![n=s1.compare(3,4,s4,2,4); cout<<" n="<<n;
m=s1.compare(3,5,s4,3,4); cout<<" m="<<m<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi
s5=2 s6=-1 s8=1 s7=7
x=0 y=1 z=0 n=-1 m=1
Satr xossalarini aniqlash funksiyalari
Satrning xossalarini aniqlash uchun quyidagi funksiyalardan foydalaniladi.
x=satr.size(); funksiyasi satr ning o’lchamini aniqlaydi.
x=satr.length(); funksiyasi satr ning belgilari sonini aniqlaydi.
x=satr.max_size(); funksiyasi satr ning maksimal o’lchamini aniqlaydi.
x=satr.capacity(); funksiyasi satr ning xotirada egallagan joyi hajmini
aniqlaydi.
x=satr.empty(); funksiyasi qiymati bool turli bo’lib, agar satr bo’sh bo’lsa,
funksiya qiymati true , aks holda false bo’ladi. Quyidagi dasturni va uning
natijalarini tahlil qling.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ int z,n,m,t,s6,s7,s8;bool x,y;float s5;
string s1="daraja ko’rsatkichida",s2="ABCDEF",s3="ABCD";
string s4="daraja ko’rsat",s9="ab87,/+|",s10="";
s5=s9.size(); cout<<"s5="<<s5;
s6=s9.length(); cout<<" s6="<<s6;
s8=s10.max_size(); cout<<" s8="<<s8;
s7=s9.capacity(); cout<<" s7="<<s7<<'\n';
x=s9.empty(); cout<<" x="<<x;
y=s10.empty(); cout<<" y="<<y<<'\n';
system("pause");
return 0;
}
Dastur natijasi quyidagicha bo’ladi s5=8
s6=8 s8=1073741820 s7=8
x=0 y=1](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_37.png)
![](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_38.png)
![XULOSA.
C++ dasturlash tilida satrlar bilan ishlashda men char[], String
tiplari bilan tanishib chiqdim undagi barcha funksiyalar bilan tanishib
chiqdim.
C++ dasturlash tilida satr turi va ulardan foydalanish usullari va
tamoyillarini qarab o’tamiz. Satr turi bu belgilardan tashkil topgan
ma‘lumotlar majmuasi hisoblanadi. Satrlarning uzunligini aniqlash,
satrlarni nusxalash, satrlarni kerakli joyga o’rnatish kabi amallarni
bajarish uchun C++dasturlash tilida keng imkoniyati mavjud. C++
dasturlash tilida satrlar ham boshqa turlar kabi oldin dastur tarkibida
e‘lon qilinishi kerak. Satrlar e‘lon qilingandan keyin ular ustida amallar
bajarish mumkin.
C++ dasturlash tilida satrlar uchun standart turdan tashqari string
turi ham qushimcha sifatida qaralgan. String turiga mansub bo’lgan satrlar
nol terminatori bilan tugallanmasdan u oddiy belgilar massivi sifatida
qaraladi. String turini afzalliklari satrlar ustida amallar bajarilgandan
So’ng dinamik ravishda o’zgartirishlar mumkin.](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_39.png)
![FOYDALANILGAN ADABIYOTLAR.
1. Стефан Р.Девис. С++ для чайников. Диаликтика. Москва -
2003. 337 с.
2. 2.Страуструп Б. Язик программирования С++.
Специальное издание. –
Москва 1997. -1055 с.
3.Фролов А.Б. Фролов Г.Б. Язик С# Самоучитель. Москва
2003.-559 с. 4.Герберт Ш. С++ Базовый курс.
Москва Издательский дом―
Ви ль я м с .‖2 0 1 0 . - 6 2 1 с.
5. Стенли Липпман. Язык программирование С++.
Базовой курс. Вильямс - М.: 2014.
6. Никита Культин. Microsoft Visual C++ в задачах и
примерах.
БХВ-Петербург - Петербург.:2010.
7. Б. Страуструп. Язык программирования С++.
Специальное издание.-М.:ООО «Бином-Пресс», 2006.-
1104 с.
8. Павловская Т.А. С++. Программирование на языке высокого
уровня
–СПб.: Питер. 2005.- 461 с.
9. Подбельский В.В. Язык С++.- М.; Финансы и статистика-
2003 562с. 10.Павловская Т.С. Щупак Ю.С.
С/С++. Структурное
программирование. Практикум.-СПб.: Питер,2002-240с
11. Павловская Т.С. Щупак Ю.С. С++. Объектно-
ориентированное программ-мирование. Практикум.-СПб.:
Питер,2005-265с
12. С++: Учебный курс.- Харьков: Фолио; М.: ООО
«Издательство АСТ», 2001.-500с.](/data/documents/d35cedda-53e2-4589-95d1-5f6a177dae5f/page_40.png)
DASTURLASH ASOSLARI VA TILLARI FANIDAN “Dasturlashda satrlar va ular bilan ishlash amallari” mavzusida KURS ISHI
MUNDARIJA. KIRISH.....................................................................................................................................3 1.1. C++ DASTURLASH TILIDA SATR TURI VA ULARDAN FOYDALANISH USULLARI.....................................................................................................................4 1.2. C++ DASTURLASH TILIDA STRING TURIGA MANSUB BO’LGAN SATRLI O’ZGARUVCHILAR....................................................................................................24 XULOSA...................................................................................................................................32 FOYDALANILGAN ADABIYOTLAR ................................................................................33
KIRISH. C++ dasturlash tili tarkibida satr, to’plam, fayl va struktura turiga mansub bo’lgan ma‘lumotlar ustida amallar bajarish imkoniyati ham mavjud. Satr turi bu dasturlashning asosiy turlaridan hisoblanadi, bunda char turiga mansub barcha ma‘lumotlar shu tur asosida qayta ishlanadi. Dasturlash aoslarida satr turi bilan ishlash bu fanning asosiy maqsadi hisoblanadi. Tashkilot va muassasalarning axborotlarini qayta ishlash vaqtida uning tarkibida asosan satr turlari bilan ishlashga to’g‘ri keladi. Bu bobda satrlar ustida satrning uzunligi, satrni nusxalash, satrni kerakli joyga o’rnatish kabi bir qator vazifalar ko’rib o’tiladi. C++ dasturlash tilida to’plam va fayl turlari ham asosiy turlardan hisoblanadi. Matematik masalalarni hal etishda asosan to’plam turi katta ahmiyat kasb etadi. C++ dasturlash tilida to’plam, to’plam elementlari, element to’plamga tegishli ekanligini aniqlash masalalarini hal etish imkoniyati mavjud. Dasturlash asoslari fanida struktura turiga mansub bo’lgan ma‘lumotlar katta ahamiyat kasb etadi. Struktura turidagi ma‘lumotlar tarkibida bir nechta turlar birgalikda qaraladi, masalan, tashkilot xodimlari haqida ma‘lumotlar struktura turiga tegishli bo’ladi. Struktura turiga e‘tibor qaratsak, bu tur dasturlashning asosiy turlari hisoblanadi, bu tur asosan ma‘lumotlar bazasini boshqarish tizimlarining asosi hisoblanadi. Yuqorida ko’rilgan turlar va ulardan foydalanish imkoniyati C++ dasturlash tili tarkibida mavjud. Mazkur qullanmaning joriy bobida yuqoridagi turlar va ulardan foydalanish usullari qarab o’tiladi. C++ dasturlash tilida satr turi va ulardan foydalanish usullari va tamoyillarini qarab o’tamiz. Satr turi bu belgilardan tashkil topgan ma‘lumotlar majmuasi hisoblanadi. Satrlarning uzunligini aniqlash, satrlarni nusxalash, satrlarni kerakli joyga o’rnatish kabi amallarni bajarish uchun C++dasturlash tilida keng imkoniyati mavjud. C++ dasturlash tilida satrlar ham boshqa turlar kabi oldin dastur tarkibida e‘lon qilinishi kerak. Satrlar e‘lon qilingandan keyin ular ustida amallar bajarish mumkin. C++ dasturlash tilida satrlar uchun standart turdan tashqari string turi ham qushimcha sifatida qaralgan. String turiga mansub bo’lgan satrlar nol terminatori bilan tugallanmasdan u oddiy belgilar massivi sifatida qaraladi. String turini afzalliklari satrlar ustida amallar bajarilgandan So’ng dinamik ravishda o’zgartirishlar mumkin.
1.1. C++ DASTURLASH TILIDA SATR TURI VA ULARDAN FOYDALANISH USULLARI Belgi va satrlar C++ dasturlash tilida bir nechta turlardan foydalanish va ular ustida amallar bajarish mimkin, dasturlash muhitida boshqa turlar kabi belgili turlar ham mavjud. C++ dasturlash tilida belgili turlar char turiga mansub bo’lgan yagona elementli tur hisoblanadi. C++ dasturlash tilida satrlar uchun alohida maxsus turlar ishlab chiqilmagan satrlarni belgilar massivi sifatida ishlatish imkoniyati mavjud. Ta‘rif: Alohida nom bilan saqlanuvchi bir nechta belgilardan tashkil topgan belgilar majmuasi satr deyiladi. Satrlarni belgilar massivi sifatida qarab ular ustida amallar bajarish mumkin. C++ dasturlash tilida satrlar nol(‘\0‘) terminatori bilan tugaydi. Nol terminatori bilan tugaydigan satrlar ASCIIZ –satrlari deyiladi. Satrlardan foydalanish va ular ustida amallar bajarish uchun albatta oldin ularni e‘lon qilish kerak. Satr turiga mansub bo’lgan o’zgaruvchilarni char xizmatchi so’zi orqali e‘lon qilinadi. Satrlarni e‘lon qilish uchun quyidagi dasturlarga etibor bering. Yuqoridagi dastur tarkibida s[10] satr o’zgaruvchisi 9 ta elementga va bitta nol terminatoriga mo’ljallangan. Satrlarni boshlang‘ich qiymatlarini berish jarayonida uning elementlar sonini berish shart emas. Agar satrlarni elementlar soni berilmasa dastur avtomatik ravishda uning elementlar soniga boshlang‘ich qiymatdagi elementlar sonidan bitta ortiq qilib ta‘minlaydi, chunki oxiriga bitta nol#include <iostream.h> #include <string.h> using namespace std; int main() { char s[10]; // s satrli o’zgaruvchini e‘lon qilish return 0; }
terminatorini hisobga oladi. Doim satrlarni kiritishda uning elementlar soni e‘lon qilinganidan oshib ketmasligi kerak aks holda faqat e‘lon qilingan elementlar soniga teng elementlarni saqlab qolinib qolganlari olinmaydi. Satrlarni kiritish jarayonida >> oqim bo’yicha kiritishdan foydalanmasdan getline() funksiyasidan foydalanish maqsadga muvofiq bo’ladi. Agar oqim bo’yicha kiritishdan foydalanilsa unda probellar inkor qilinib satrni ikkinchi qismlari qabul qilinmaydi. getline(s,n) funksiyasi ikkita parametrni o’z ichiga oladi, birinchisi s satr o’zgaruvchisi ikkinchisi n satr elementlar soni. Getline funksiyasi satr elementlaridan ortiq qiymatlarni ham kiritish imkoniyatini yaratadi, natijada satr elementlari ortadi. Kiritish jarayonini amalga oshirish uchun quyidagi dasturlarga etibor bering. Misol: Berilgan satrni ekranga chiqaring. #include <iostream.h> #include <string.h> using namespace std; int main() { char s[10]; // s satrli o’zgaruvchini e‘lon qilish cin.getline(s,10); cout<<s; return 0; } Kiritish ma‘lumotlari Absdefghl Dastur natijasi Absdefghl Yuqoridagi dastur tarkibidagi s satrli o’zgaruvchi faqat 9 ta elementni qbul qiladi, agar 9 tadan ortiq bo’lsa natija qaytarmaydi. Satr uzunligini aniqlash Satrlar ustida amallar bajarish vaqtida albatta satrlarning uzunligi kerak bo’ladi. Satr uzunligini aniqlash uchun string.h kutubhonasiga murojat qilish kerak aksariyat satr uchun ishlatiladigan funksiyalarni string.h kutubhonasiga murojat qilib ishlatishimiz mumkin. Satr uzunligini aniqlashni ikki hil usuli mavjud. -satr tarkibidagi mavjud elementlar sonini nol terminatorisiz aniqlash; -satr tarkibidagi elementlarga ajratilgan sonini nol terminatori bilan aniqlash;