String turidagi satrlar va ular ustida amallar.
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-“;