Kursatkichlar va simvolli massivlar.
C ++ tili mualliflari massivlar o’rnida funktsiyalarda ko’rsatkichlardan foydalanishni maslahat beradilar. Shuni ta'kidlab o’tish kerakki massivlar nomlari funktsiya tanasida konstanta deb hisoblanmaydi, Shuning uchun bu ko’rsatkichga ++ va – amallarini qo’llash mumkindir. Misol tariqasida so’zlar bilan ko’rilgan funktsiyalarni faqat ko’rsatkichlardan foydalanilgan variantlarini ko’rib chiqamiz.
Satr uzunligini hisoblash:
Int len (char *s)
{ int m;
for(m=0; *(s+m)!=’\0’;m++)
return m;
}
Keyingi variantda s kursatkichga ++ amali qo’llaniladi:
Int len (char *s)
{ int m;
for(m=0; *s++!=’\0’;m++)
return m;
}
Bir satrdan ikkinchisiga nusha olish:
Void copy(char *c1, char *c2)
{
I=0;
While(*(c1+i)=*(c2+I))1=’0’)
I++;
}
Nol'dan katta qiymat while operatori shartida rost hisoblangani uchun bu dasturni ++ amalini qo’llagan holda qo’yidagicha qisqarok yozish mumkin:
Void copy(char *c1, char *c2)
{
While(*c1++=*c2++);
}
Satrlarni ulash(konkatenatsiya funktsiyasi)
Void concat(char *c1,char *c2)
Int I;
For(m=0;*(c1+I)!=’\0’; m ++)
While((*(c1+m+I)=*(c2+I))
I++;
}
Bu funktsiyaning qisqa varianti:
Void concat(char *c1,char *c2)
While(*c1++);
While(*c1++=*c2++)
}
Ikki satrni o’zaro solitirish:
Bu misolimizda ko’rsatkichlardan har hil foydalanish usullari ko’rsatiladi:
Int row(char c1[], char c2[])
{ int I,m1,m2;
for(m1=0; *(c1+m1)=’\0’;m1++);
for(m2=0;*(c2+m2)=’\0’,m2++)
if (m1!=m2) return -1;
for(I=0;I
if (*c1++ !=*c2++) return (I+1);
return 0;
Bu funktsiya qo’yidagi qiymatlarni qaytaradi:
Agar satrlar uzunligi har hil bulsa 0;
Agar hamma simvollar mos kelsa 0;
Agar simvollar mos kelmasa birinchi mos kelmagan simvol nomeri.
Dostları ilə paylaş: |