- Mavzu: C++ da satrli kattaliklar va ular bilan ishlash
- Reja:
- String turidagi satrlar haqida;
- Satr qismini boshqa satrga nusxalash funksiyasi;
- Satr qismini boshqa satrga qo‘shish funksiyasi;
- Satr qismini boshqa satr ichiga joylashtirish, o‘chirish, almashtirish, ajratib olish va izlash funksiyalari;
- Xulosa.
- 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.
- 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;
- 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 амалга эквивалент
- Misol:
- string s1,s2,s3;
- s1=”0123456789”;
- s2.assign(s1,4,5); // s2=”45678”
- s3.assign(s1,2,20); // s3=”23456789”
- Yana bir misol:
- char * strold;
- cin.getline(strold,100);//”0123456789” киритилади
- string s1,s2;
- s2.assign(strold,6); // s2=”012345”
- s3.assign(strold,20); // s3=”0123456789”
- 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.
- Misol:
- char * sc;
- cin.getline(sc,100); //”0123456789” киритилади
- string s1,s,s2;
- s2=sc; s1=”misol”;
- s=”aaa”; //s2=”0123456789”
- s2.append(”abcdef”); //s2+=”abcdef” амали
- //ва s2=”0123456789abcdef”
- s1.append(s2,4,5); //s1=”misol45678”
- s.append(ss,5); // s=”aaa012345”
- 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” сатри киритилади
- 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 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:
- Misol:
- 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(); //сатр бўш ҳисобланади (s1=””)
- 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” ва s1=”98765432” бўлади.
- 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” сатр экранга чиқади
- cout<
- 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.
string sinfida satr qismini izlash uchun har xil variantdagi funksiyalar aniqlangan. Quyida ulardan asosiylarining tavsifini keltiramiz. - 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.
- 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 rfind(const string &str,
- unsigned int pos=npos)const;
- Funksiya, uni chaqirgan satrning ko‘rsatilgan pos o‘rnigacha str satrning birinchi uchragan joyini 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.
- 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. - 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
- void main()
- {
- String s1=”01234567893456ab2csef”, s2=”456”, s3=”ghk”;
- cout<<“s1=”<
- cout<<“s2=”<
- cout<<“s3=”<
- if(s2.compare(s3)>0)cout<<“s2>s3”<
- if(s2.compare(s3)==0)cout<<“s2=s3”<
- if(s2.compare(s3)<0)cout<<“s2
- if(s1.compare(4,6,s2)>0)cout<<“s1[4-9]>s2”<
- if(s1.compare(5,2,s2,1,2)==0)
- cout<<“s1[5-6]=s2[1-2]”<
- }
Do'stlaringiz bilan baham: |