• 15 ta ko'rildi

C dasturlash tili / Satrlar

Satrlar. C da belgili ma’lumotlar uchun char turi qabul qilingan. Belgili axborotni taqdim etishda belgilar, simvolli o’zgaruvchilar va matnli konstantalar qabul qilingan.

Misollar:

const char c = 'c'; 
char a,b;

C dagi satr - bu nul-belgi - \0 (nul-terminator)- bilan tugallanuvchi belgilar massivi. Nul-terminatorning holatiga qarab satrning amaldagi uzunligi aniqlanadi. Bunday massivdagi elementlar soni, satr tasviriga qaraganda, bittaga ko’p. Simvolli massivlar quyidagicha inisializasiya qilinadi:

char capital[] = "UZBEKDEVS"; 

Bu holda avtomatik ravishda massiv elementlari soni aniqlanadi va massiv oxiriga satr ko’chirish '\0' simvoli qo’shiladi. Yuqoridagi inisializasiyani quyidagicha amalga oshirish mumkin:

char capital[] = {'U','Z','B','E','K','D','E','V','S','\0'};

Bu holda so’z oxirida '\0' simvoli aniq ko’rsatilishi shart. Qiymat berish operatori yordamida satrga qiymat berish mumkin emas. Satrni massivga yoki kiritish paytida yoki nomlantirish yordamida joylashtirish mumkin.

#include <stdio.h>
 #include <stdlib.h> 
int main()
{
char s1[10] = "string1"; 
int k = sizeof(s1); 
printf("\n%s %d",s1,k); 
char s2[] = "string2";
k = sizeof(s2); 
printf("\n%s %d",s2,k);
char s3[] = {'s','t','r','i','n','g','3','\0'};
k = sizeof(s3);
printf("\n%s %d",s3,k);
char *s4 = "string4";//satr ko'rsatkichi, uni o'zgartirib bo'lmaydi k = sizeof(s4);
printf("\n%s %d",s4,k);
 system("pause"); 
return 0;
}

Natija:

string1 10 
string2 8
string3 8
string4 4

Keyingi misolda kiritilgan so’zdan berilgan harfni olib tashlash dasturi berilgan.

#include <stdio.h> 
int main()
{
char s[100]; 
scanf("%s",&s);
 int i, j;
for ( i = j = 0; s[i] ! = '\0'; i++) 
if ( s[i] ! = 'c' )
s[j++] = s[i]; 
s[j] = '\0'; 
printf("%s",s);
 return 0;
}

Xar safar 's' dan farqli simvol uchraganda, u j pozisiyaga yoziladi va faqat shundan so’ng j ning qiymati 1 ga oshadi. Bu quyidagi yozuvga ekvivalent:

if ( s[i] ! = c )
s[j] = s[i]; j++;

Funksiyalar va satrlar.

Funksiyalarda satrlar ishlatilganda ularning chegarasini ko’rsatish shart emas. Satrlarning uzunligini hisoblash len funksiyasini quyidagicha ta’riflash mumkin:

int len(char c[])
{ int m = 0;
for(m = 0;c[m]! = ’0’; m++); 
return m;
};

Shu funksiyadan foydalanilgan dasturni keltiramiz:

#include <stdio.h> 
int len(char c[])
{
int m = 0;
 while(c[m++]); 
return m-1;
} 
int main() {
char e[] = "UZBEKDEVS!";
printf("\n%d", len(e)); 
return 0;
}

Bu funksiyaning standart varianti strlen deb ataladi va bu funksiyadan foydalanish uchun string.h sarlavha faylidan foydalanish lozim. Satrdan nusxa olish funksiyasi strcpy ni C tilida quyidagicha ta’riflash mumkin:

#include <stdio.h>
void strlen(char s1[], char s2[]) 
{
int i = 0;
while(s2[i]! = '\0') 
s1[i++] = s2[i];
s1[i] = s2[i];
}
int main() {
char s1[] = "aaa"; 
char s2[] = "ddd";
strcpy(s1,s2); 
printf("%s",s1); 
return 0;
}

Natija:

ddd

Berilgan satrni teskariga aylantiruvchi funksiya:

reverse(char s[])
{
int c, i, j;
for(i = 0, j = strlen(s) - 1;  i < j;  i++, j--) 
c = s[i];
s[i] = s[j]; 
s[j] = c;
 }

Keyingi misolimizda T qatorni S qator oxiriga ulovchi STRCAT(S,T) funksiyasini ko’rib chiqamiz:

strcat(char s[], t[]) 
{
int i, j; i = j = 0;
while (s[i] ! = '\0') 
i++;
while((s[i++] = t[j++]) ! = '\0') 
}

So’zlar massivini kiritish.

C tilida so’zlar massivlari ikki o’lchovli simvolli massivlar sifatida ta’riflanadi. Misol uchun:

char name[4][5]. 

Bu ta’rif yordamida har biri 5 ta harfdan iborat bo’lgan 4 ta so’zli massiv kiritiladi. So’zlar massivlari quyidagicha inisializasiya qilinishi mumkin:

char Name[3][8] = { "Anvar","Mirkomil","Yusuf"}.

Bu ta’rifda har bir so’z uchun xotiradan 8 bayt joy ajratiladi va har bir so’z oxiriga ' \0' belgisi kuyiladi. So’zlar massivlari inisializasiya qilinganda so’zlar soni ko’rsatilmasligi mumkin. Bu holda so’zlar soni avtomatik aniqlanadi:

char comp[][9] = { "kompyuter","printer","kartridj"}.

Quyidagi dasturda berilgan harf bilan boshlanuvchi so’zlar ro’yxati bosib chiqariladi:

#include <stdio.h>
int main()
{
char a[10][10];
char c = 'a';
int i;
for (i = 0;i<3;i++) scanf("%s",&a[i]);
for (i = 0;i<3;i++)
if (a[i][0] == c) printf("\n%s",a[i]);
return 0;
}

Quyidagi dasturda fan nomi, talabalar ro’yxati va ularning baholari kiritiladi. Dastur bajarilganda ikki olgan talabalar ro’yxati bosib chiqariladi:

#include <stdio.h>
int main()
{
char a[10][10];
char s[10];
int k[10];
scanf("%s",&s);
for (int i = 0;i<3;i++)
{
scanf("%s",&a[i]);
scanf("%d",&k[i]);
};
for (int i = 0;i<3;i++)
if (k[i] == 2) 
printf("%s\n",a[i]);
return 0;
}