6.29.Simvollardan ibarət sətirlərin işlənməsi
C++ dilində Pascal dilində olduğu kimi xüsusi sətir tipi yoxdur. Sətir tiplər simvollardan ibarət massiv kimi təşkil olunur, sətrin axrıncı simvolu daxili kodu 0-olan \o-simvolu qəbul edilir. Turbopaskalda sətrin uzunluğu 255-simvoldan çox olmamalıdır və 1-ci baytda sətrin uzunluğunu müəyyən edən kod yerləşir. C++ dilində isə sətrin uzunluğuna məhdudiyyət yoxdur. Sətirlər simvollardan ibarət massiv kimi təsvir olunur:
char str [20];
Sətrin 1-ci elementinə olan göstərici vasitəsi ilə sətrə müraciət etmək olar. Sətrin qiyməti onun birinci simvolunun ünvanı ilə müəyyən olunur. Beləliklə, C++ dilində sətir onun birinci elementinə olan göstəricidir. Bu mənada sətirlər massivlərə oxşardır. Massivin adı da onun birinci elementinə olan göstəricidir. Sətirlər simvollardan ibarət massiv kimi və ya char*-tipli dəyişən kimi təsvir edilir:
char color[ ]=”green”;
const Char*ColorPtr=”green”;
Bu halda sətir dəyişəninə “green” sözü mənimsədilir. Birinci elanda 6 elementdən ibarət massiv yaradılır. Bu elementlər ‘g’, ‘r’, ‘l’, ‘e’, ‘n’- və ‘\o’ simvollarıdır. İkinci elan ColorPtr-göstərici dəyişənini yaradır ki, bu dəyışən yaddaşdan “green” sətrini göstərir. C++ dilində istənilən uzunluqda sətri saxlamağa imkan verilir. Əgər sətrin ölçüsü bu sətir saxlanılan simvol massivin ölçüsündən böyükdürsə massivin sərhədindən kənara keşən simvollar yaddaşda massivdən sonra gələn verilənləri dəyişə bilər. CİN-operatorudan istifadə etməklə massivə sətri mənimsətmək olar. Məsələ, sətri word[20]-simvol masivinə aşağıdaki kimi mənimsətmək olar:
Cin>>word;
İstifadəçi tərəfindən daxil edilən sətir word dəyişənində saxlanılır. Bu operator simvolları o vaxta qədər oxuyur ki, probelə, tabulyasiya simvoluna, yeni sətirə keçid simvoluna və ya faylın sonu göstəricisinə rast gəlməsin. Yekun sıfır simvoluna yer olması üçün sətir 19 simvoldan çox olmamalıdır. Sətr manipulyatorundan istifadə etməklə word-dəyişəninə oxunan sətrin ölçüsünün massivin ölçüsündən böyük olmamasına nəzarət etmək olar.
Məsələ,
Cin>>setw(20)>>word;
Bu operator onu göstərir ki, word massivinə maksimum 19 element oxumaq olar. 20-ci simvol yekun sıfır simvolu götürülür. Bəzi hallarda massivə tam mətn vermək lazım gəlir. Bunun üçün CİN.getline funksiyasından istifadə edilir. Bu funksiya üç arqument tələb edir: Mətnin saxlanması üçün lazım olan simvollar massivi, uzunluğu, və məhdudiyyət simvolu.
Məsələ,
Char text[80];
Cin.getline(text, 80, ‘\n’);
80-simvoldan ibarət text massivi elan olunur, sonra klaviaturadan bu massivə mətnin sətirləri oxunur. Funksiya simvolların oxunmasına o vaxt dayandırır ki, ‘\n’-məhdudiyyət simvoluna rast gəlsin və ya faylın sonu əlaməti daxil edilsin və ya oxunan simvolların sayı ikinci arqumentdə göstərilən saydan bir vahid az olsun. ‘\n’ arqumenti susma prinsipinə görə də başa düşülür və aşağıdaki kimi də yazmaq olar:
Cin.getline(text,80);
Faktiki parametr olaraq simvolun və uyğun formal parametr olaraq sətrin götürülməsi səhvlərə səbəb ola bilər və ya tərsinə olan əməliyyat (Faktiki parametr-sətir, Formal param-simvol) gözlənilməz səhvlərə gətirib çıxara bilər. Çünki sətir onun birinci elementinə olan göstəricidir.
Sətirləri təsvir olunan vaxt inisiallaşdırmaq da olar. Sətirləri iki üsulla inisiallaşdırmaq olar: sətir sabitləri vasitəsi ilə və simvolların siyahısı şəklində:
char S[10]=”sətir”;
char S[ ]=”sətir”;
char S[10]={‘s’, ‘ə’, ‘t’, ‘i’, ‘r’, ‘\o’};
Birinci təsvirdə S-simvolu üçün 10 bayt yer ayrılır, bunlardan 6-baytı başlanğıc qiymət alır (6-cı bayt \0-simvolu).
İkinci təsvir 6-baytdan ibarət sətir formalaşdırır. Üçüncü təsvirin nəticəsi birinci təsvirlə eynidir. Üçüncü təsvir aşağıdaki kimi də yaza bilərik:
char S[10]={‘s’, ‘ə’, ‘t’, ‘i’, ‘r’};
Yəni sətrin sonunda sıfır simvolu göstərməmək də olar. Bu halda sətrin sonu məlum olmur və sətirlərin emalında problemlər qarşıya çıxa bilər.
Sətrin ayrı-ayrı elemetlərinə indeksdən istifadə etməklə müraciət etmək olar. Məsələ,
S[0]=’s’; S[4]=’r’;
Adətən sətirlərin emalı sətrin başlanğıc simvolundan başlayaraq axırıncı simvolunun seçilməsi ilə əlaqədardır. Belə seçmənin sona çatması əlaməti \0-simvolunun tapılması olur.
Dostları ilə paylaş: |