Simvollar və sətirlər
Simvol və sətirlərin sintaksisi
Proqramlaşdırmadaverilənlərin tiplərindən biri də character–tipidir və simvol tipi işarə etmək üçün istifadə olunur.
Proqramların işlədiyi obyektlər içərisində xüsusi yeri mətnlər, yəni hərflər, boşluqlar, durğu işarələri və sətrin sonunu, yeni abzasın başlanğıcını işarə edən görünməyən idarəedici simvollar ardıcıllığı tutur.
Ən geniş yayılmış proqram bildiyimiz kimi kompilyatordur. O, proqramın mətnini analiz edir və onları prosessorun əmrlərinə çevirir. Digər geniş yayılmış proqram isə mətn redaktorudur. Onun köməyi ilə proqramlar, romanlar, povestlər və s. yazılır.
Hərflər, durğu işarələri və idarəedici simvollar C dilində simvollar adlanır. Bir simvol səkkiz bitlə kodlaşdırılır və o, char dəyişənində saxlanıla bilər. Simvollar təkqat dırnaq işarəsi daxilində yazılır və aşağıdakı kimi təsvir olunur:
unsigned char x;
x=’a’ ;
proqramın bu fraqmentinin yerinə yetirilməsindən sonra x dəyişənində latın əlifbasının kiçik a hərfi kodlaşdırılan ədəd yerləşəcək. Bu ədəd 97 –yə bərabərdir, lakin elə kompüterlər ola bilər ki, orada bu hərf başqa cür kodlaşdırılsın.
Bəzi simvollar görünməyəndirlər, onların yazısı üçün dırnaq işarəsi daxilində hərflər ardıcıllığı istifadə olunur. Məsələn, ‘\n’ – sətrin keçidi, ‘\r’ – karetkanın qaytarılması.
Simvollar adətən bir-birinin ardınca yazılır və sözlər, cümlələr və s. əmələ gətirirlər. Məsələn, “Bakı” sözünü dörd ədəddən ibarət olan massivdə saxlamaq olar:
char x[4];
x[0]=’B’;
x[1]=’a’;
x[2]=’k’;
x[3]=’i’;
onu ekrana printf () funksiyası ilə çıxarmaq olar:
int i;
for (i=0; i<3;i++);
printf(“%c, x[i]);
printf(“\n”);
Bu proqramı bir qədər sadələşdirmək olar:
Misal 8.1.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{unsigned char x[5];
int i;
x[0]='B';
x[1]='a';
x[2]='k';
x[3]='i';
x[4]='\0';
i=0;
while (x[i]!='\0'){
printf("%c",x[i]);
i++;
}
printf("\n");
getch();
return 0;
}
Burada x[0] massivində artıq beş simvol var (sözün sonunda '\0' simvolu əlavə olunmuşdur), for () dövr operatoru əvəzinə isə while () dövr operatoru tətbiq olunmuşdur. Bu proqramın nöqsanı ondadır ki, hər hərfi massivə əllə daxil etmək lazımdır. Bu prosesi kompilyatora həvalə etmək üçün C dilində xüsusi konstruksiya – sətir mövcuddur.
Sətir – ikiqat dırnaq işarəsi daxilinə alınmış simvollar ardıcıllığıdır. Məsələn, “Bakı”. Sətri massivə salmaq üçün
unsigned char []=”Baki”;
yazmaq kifayətdir.
Bu sətrə rast gəldikdə kompilyator özü beş simvoldan ibarət massiv - dörd hərf və yekunlaşdırıcı null '\0' simvolu yaradır.
x[0] x[1] x[2] x[3] x[4]
B | A | K | I | '\0' |
Şəkil 8.1.char x[]=”Baki”əmri ilə yaradılan x massivi
Beləliklə, ekrana Baki sözünü çıxaran proqram aşağıdakı kimi olar:
Misal 8.2.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{unsigned char x[]="Baki";
int i;
i=0;
while (x[i]) {
printf("%c",x[i]);
i++;
}
printf("\n");
getch();
return 0;
}
Bu proqramı daha da təkmilləşdirmək üçün while () dövrünü atmaq olar, belə ki, printf funksiyasında sətri çap etmək üçün xüsusi %s şablonu var:
Misal 8.3.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{unsigned char x[]="Baki";
printf("%s\n",x);
getch();
return 0;
}
Beləliklə, x[ ] massivində yerləşən sətrin ekrana çıxarılması adi x ədədinin çıxarılması ilə eynidir. Lakin sadəliyin arxasında daha mürəkkəb əməllər durur: yaddaşda sətrin başlandığı yeri təyin etmək lazımdır, sonra hər sonrakı simvolun sıfra bərabər olduğunu yoxlamaq lazımdır, sıfra bərabər deyilsə, ekranda göstərilsin. Əgər simvol sıfırdırsa, sətrin sonu çatıb, onda '\n' simvolunu çıxarmaq və proqramı sona çatdırmaq lazımdır.
Sətirlərlə işləyən funksiyalar
Strcat
Sintaksisi: char*strcat (char* sətir1, const char* sətir2);
Funksiyası: sətir1 və sətir2 sətirlərini birləşdirir və nəticəni sətir1-ə yazır.
Strcpy
Sintaksisi: char*strcpy(char*sətir1, const char*sətir2);
Funksiyası: sətir1-i sətir2-yə köçürür.
Başlıq fayl: <string.h>.
Strlen
Sintaksisi: int strlen(const char*sətir);
Funksiyası: sətrin sonunu qaytarır. Sıfır simvol nəzərə alınmır.
Başlıq fayl: <string.h>.
Strcmp
Sintaksisi: int strcmp(const char*sətir1, const char*sətir2);
Funksiyası: sətir1 və sətir2-ni müqayisə edir. Əgər sətirlər bərabərdirsə, onda sıfır qiyməti qaytarır, əgər sətir1<sətir2 olarsa, sıfırdan kiçik ədəd, əgər sətir1>sətir2 olarsa, sıfırdan böyük ədəd qaytarır. Başlıq fayl: <string.h>.
Strlwr
Sintaksisi: char* strlwr(char*sətir);
Funksiyası: sətrin böyük hərflərini kiçik hərflərə çevirir (yalnız latın hərflərini emal edir).
Başlıq fayl: <string.h>.
Strupr
Sintaksisi: char*strupr(char*sətir);
Funksiyası: sətrin kiçik hərflərini böyük hərflərə çevirir (yalnız latın hərflərini emal edir).
Başlıq fayl: <string.h>.
Strset
Sintaksisi: char*strupr(char*sətir);
Funksiyası: funksiya çağrılarkən sətri göstərilən simvolla tamamlayır.
Başlıq fayl: <string.h>.
Strchr
Sintaksisi: char*(strchr(const char*sətir, int simvol); Funksiyası: sətirdə simvolun axtarışını yerinə yetirir və göstəricini ilk tapılmış simvolun üzərinə qaytarır və ya əgər simvol tapılıbsa, NULL qaytarır.
Başlıq fayl: <string.h>.