Eslatma. E'lonlarni to'g'ri talqin etish uchun “suffiks prefiksdan mahkamroq bog'langan” mnemonik qoidani eslab qolish lozim. Agar o'zgaruvchini tavsiflashda bir vaqtda prefiks * (ko'rsatgich) va suffiks [] (massiv) dan foydalanilsa, u holda o'zgaruvchi int *p[10] – intga 10 ta ko'rsatgichlar massiviga ko'rsatgich emas, ko'rsatgichlar massivi sifatida talqin etiladi.
Satrlar
Satr nol – simvol bilan tugaydigan simvollar massividan iborat. Nol – simvol bu 0 ga teng kodli simvol, u boshqaruvchi ‘\0’ ketma-ketlik ko'rinishida yoziladi. Nol – simvol joylashishiga qarab satrning haqiqiy uzunligi aniqlanadi. Satrni satr literali bilan initsializatsiyalash mumkin.
char str[10] = "Vasia";
// nomerlari 0 dan 9 gacha bo'lgan 10 ta element ajratilgan
// birinchi elementlar – 'V', 'a', 's', 'i', 'a', '\0'
Bu misloda satrga 10 bayt ajratiladi, ulardan 5 tasi satr simvoliga, oltinchisi nol – simvolga ajratilgan. Agar satr aniqlanganda initsializatsiyalansa, uning o'lchamini tashlab yuborish mumkin (kompilyatorning o'zi mos baytlar sonini ajratadi):
char str[10] = "Vasia"; // 6 bayt ajratilgan va to'ldirilgan
Operator
char *str = "Vasia";
operator satr o'zgaruvchini yaratmaydi, o'zgartish mumkin bo'lmagan satr konstantga ko'rsatgichni yaratadi (misol uchun str[1]='o' operator yo'l qo'yilmaydi).
Satr literali oldidagi tenglik belgisi qiymat berishni emas, initsializatsiyani bildiradi. Bir satrni ikkinchisiga berish amali aniqlanmagan (chunki satr massiv hisoblanadi) va sikl yoki standart kutubxona funksiyalari yordamida bajarilishi mumkin. Kutubxona nusxalash, taqqoslash, satrlarni birlashtirish, qismsatrni izlash, satr uzunligini aniqlash va h.k.lar imkoniyatlarini beradi, hamda klaviatura va fayldan satrlarni va alohida simvollarni kiritish maxsus funksiyalarini o'z ichiga oladi.
Misol. Dastur parolni uch martadan ko'p so'ramaydi.
#include
#include
int main () {
char s[80], passw[] = "kuku"; // passw – etalon parol
// *passw = "kuku" kabi tasvirlash mumkin
int i, k = 0;
for (i = 0; !k && i<3; i++) {
printf ("\n parolni kiriting: \n");
gets(s); // satrni kiritish funksiyasi
if (strstr(s.passw))k = 1; // satrlarni taqqoslash funksiyasi
}
if (k) prinf("\n parol qabul qilindi");
else printf("\n parol qabul qilinmadi");
return 0;
}
Satrlar bilan ishlashda ko'pincha ko'rsatgichlar ishlatiladi.
DIQQAT
Satrlar bilan ishlashda tarqalgan xatolarni nol – simvol yo'qligi va satrni ko'rib chiqishda ko'rsatgichning uning chegarasidan chiqib ketishi.
src satrini dest satriga nusxalashni qaraymiz. Algoritmi quyidagi ko'rinishga ega:
char src[10], dest[10];
…
for (int i = 0; i<=strlen(src); i++) dest[i] = src[i];
Satr uzunligi strlen funksiyasi yordamida aniqlanadi, u nol – simvolni izlashni bajarib uzunlikni hisoblaydi. Shunday qilib, satr 2 marta qaraladi. Nol – simvol tekshirishni bevosita dasturda bajarish samarali bo'ladi. Indeks oshishini ko'rsatgichlar inkrementi bilan almashtirish mumkin (buning uchun src satrga dinamik xotira ajratish lozim, hamda qo'shimcha ko'rsatgich aniqlash va uni dest satr boshi adresi bilan initsializatsiyalash talab qilinadi).
#include
int main () {
char *src = new char [10];
char *dest = new char [10], *d = dest;
cin >> src;
while ( *src != 0) *d++ = *src++;
*d = 0; // tuvallovchi nol
cout << dest;
return 0;
}
Siklda satrlar elementlari simvoldan keying qiymat berish bir vaqtda ko'rsatgichlarni inkrementlash bilan amalga oshiriladi. Qiymat berish amali natijasi – uzatilayotgan qiymat, uning o'zi sikl jarayonida tekshiriladi, shuning uchun qiymat berishni shart o'rniga nolga teng emasligiga tekshirishni esa tashlab yuborish mumkin (bunda tugallovchi nol siklda nusxalanadi va uni berish uchun alohida operator talab etilmaydi). Natijada satrni nusxalash sikli
while ( *d++ = *src++);
ko'rinishini oladi. Satrlar bilan ishlashning ikkala usuli (massivlar yoki ko'rsatgichlar orqali) qulay, lekin o'zining plus va minuslariga ega, lekin umumiy holda kutubxona funksiyalaridan yoki C++ kutubxonasidagi indekslashtirish, qiymat berish, taqqoslash, qo'shish, satrlarni birlashirish va qism satrlarni izlash hamda C – satrlarni almashtirish, ya'ni char tipidagi massivlarni stringga va aksincha almashtirishlarni ta'minlaydigan string sinfidan foydalanish maqsadga muvofiq.
Do'stlaringiz bilan baham: |