9-LEKCIYA PREZENTACIYA
.pdf9-LEKCIYA. QATARLAR HÁM KEŃEYTILGEN BELGILER (CHAR TIPINDE). QATAR STANDART FUNKCIYALARÍ HÁM
OLAR JÁRDEMINDE QATARLARDÍ QAYTA ISLEW.
Standart C++ tili eki tiptegi belgiler jıynaǵın qollapquwatlaydı. Birinshi tipke
ádettegidey “tar” belgiler dep atalıwshı 8-bitli belgiler jıynaǵı kiredi, ekinshisine 16-bitli “keń‟” belgiler kiredi. Til kitapxanasında hár bir topar belgileri ushın ayrıqsha funkciyalar toplamı anıqlanǵan.
C++ tilinde qatar ushın ayrıqsha tip anıqlanbaǵan. Qatar char - tipindegi belgiler massivi sıpatında
qaraladı |
hám |
bul |
belgiler |
izbe-izligi |
qatar |
terminatorı dep atalıwshı 0 kodlı belgi menen tamamlanadı („\0‟). Ádette nol-terminatorlar menen tawsılǵan qatarlar ASCIIZ-qatarlar dep ataladı.
Tómendegi tablicada C++ tilinde belgi sıpatında isletiliwi múmkin bolǵan
turaqlılar toplamıTó endkeltirilgengi abl cada C++. tilinde belgi sıpatında isletiliwi múmkin bolǵan
turaqlılar toplamı keltirilgen.
1-keste. C++ tilindegi belgi turaqlılar
1-keste. C++ tilindegi belgi turaqlılar
Belgiler klassları |
|
Belgi turaqlılar |
|
|
|
Bas háripler |
|
„A‟ …‟Z‟, „A‟…‟Я‟ |
|
|
|
Kishi háripler |
|
„а‟ …‟z‟, „á…‟я‟ |
|
|
|
Sanlar |
|
„0‟ …‟9‟ |
|
|
|
Bos orın |
|
Gorizontal tabulyaciya (ASCII kodı 9), qatardı |
|
|
ótkeriw (ASCII kodı 10), vertikal tabulyaciya |
|
|
(ASCII kodı 11), formanı ótkeriw (ASCII kodı |
|
|
12), karetkani qaytarıw (ASCII kodı 13). |
|
|
|
Punktuaciya |
belgileri |
! ” # $ & „ ( ) * + - , . / : ; < = > ? @ [ \ ] ^ _ { | } ~ |
(ajıratıwshılar) |
|
|
|
|
|
Basqarıw belgileri |
|
ASCII kodı 0...1Fh aralıǵında hám 7Fh bolǵan |
|
|
belgiler |
|
|
|
Probel |
|
ASCII kodı 32 bolǵan belgi |
|
|
|
On altılıq sanlar |
|
„0‟…‟9‟, „Á…‟F‟, „á…‟f‟ |
|
|
|
Qatar massivin járiyalaw waqtında, qatar sońına terminator qoyılıwı hám nátiyjede qatarǵa qosımsha bir bayt bolıwın itibarǵa alıwımız kerek:
char qatar[10];
Bul járiyalawda qatar qatarı ushın jámi 10 bayt ajıratıladı, sonnan 9 bayt qatar payda etiwshi belgiler ushın hám 1 bayt terminator ushın.
Qatar ózgeriwshileri járiyalanǵanda baslanǵısh mánislerdi qabıl etiwi múmkin. Bunday jaǵdayda kompilyator avtomat túrde qatar uzınlıǵın esaplaydı hám qatar sońına terminatordı qosıp qoyadı:
char hapte_kuni[]=”Juma”;
bul járiyalaw tómendegi járiyalaw menen ekvivalent:
char hapte_kuni[]={’J’,’ú,’m’,’á,’\0’};
Qatar |
mánisin |
oqıwda |
aǵımlı |
oqıw |
operatorı |
“>>” |
ornına getline() funkcıyasın isletken maqul boladı, sebebi aǵımlı oqıwda probeller biykar etiledi (olar qatar belgisi bolıp esaplansada) hám oqılıp atırǵan belgiler izbe-izligi qatarda asıp ketkende de belgilerdi kiritiw dawam etiwi múmkin.
Nátiyjede qatar ózine ajıratılǵan ólshemnen artıq belgilerdi “qabıl” etedi. Sol sebepli, getline() eki parametrge iye bolıp, birinshi parametr oqıw ámelge asırıp atırǵan qatarǵa kórsetkish, ekinshi parametrde bolsa oqılıwı kerek bolǵan belgiler sanı kórsetiledi. Qatardı getline() funkciyası arqalı oqıwına mısal kóreyik:
#include <iostream.h> int main()
{
char qatar[6];
cout << ”qatardı kiritiń “ << ’\n’; cin.getline(satr, 6); cout << ”siz kiritken qatar: “ << qatar; return 0;
}
Programmada isletilgen qatar qatarı 5 belgini qabıl etiwi múmkin, artıqları taslap jiberiledi. getline() funkciyasına múráját etiwde ekinshi parametr mánisi oqılıp atırǵan qatar uzınlıǵınan úlken bolmawı kerek.
Qatar menen islesetuǵın funkciyanıń kópshiligi «string.h» kitapxanasında jaylasqan. Salıstırmalı kóp isletiletuǵın funkciyalar ańlatpaların keltiremiz.
Qatar uzınlıǵın anıqlaw funkciyaları.
Qatarlar menen islewde, kópshilik jaǵdaylarda qatar uzınlıǵın biliw zárúr boladı. Bunıń ushın «string.h» kitapxanasınan strlen() funkciyası anıqlanǵan bolıp, onıń sintaksisi tómendegishe boladı:
size_t strlen(const char* string)
Bul funkciya uzınlıǵı esaplanıwı kerek bolǵan qatar basına kórsetkish bolǵan jalǵız parametrge iye hám ol nátiyje sıpatında belgisiz (+,-) pútin sandı qaytaradı. strlen() funkciyası qatardıń haqıyqıy uzınlıǵınan bir kem mánis qaytaradı, yaǵnıy nol-terminator ornı esapqa alınbaydı.
Dál sonday maqsette sizeof() funkciyasınan da paydalanıw múmkin hám ol strlen() funkciyasınan parıqlı túrde qatardıń haqıyqıy uzınlıǵın qaytaradı. Tómendegi keltirilgen mısalda qatar uzınlıǵın esaplawdıń hár eki variantı keltirilgen:
#include <iostream.h> #include <string.h> int main()
{
char Str[] = "1234567890";
cout << "strlen(Str) = " << strlen(Str) << endl; cout << "sizeof(Str) = " << sizeof(Str) << endl; return 0;
}
Programma islewi nátiyjesinde ekranǵa
strlen(Str) = 10 sizeof(Str) = 11
xabarı shıǵadı.
Ádette sizeof() funkciyası getline() funkciyasınıń ekinshi argumenti sıpatında isletiledi hám qatar uzınlıǵın anıq kórsetpew imkanın beredi:
cin.getline(Qatar, sizeof(Qatar));
Mısalı ushın: Tek ǵana latın háriplerinen ibarat bolǵan qatar berilgen. Ondaǵı hár túrli háripler muǵdarı anıqlansın.
int main()
{
const int n = 80; char qatar[n];
cout << "Qatardı kiritiń: "; cin.getline(qatar, sizeof(qatar)); float s = 0;
int k;
for(int i = 0; i < strlen(qatar); i++) if(qatar[i] != ' ')
{
k = 0;
for(int j = 0; j < strlen(qatar); j++) if(qatar[i]==qatar[j] ||
abs(qatar[i]- qatar[j]) == 32) k++; s += 1. / k;
}
cout << "qatardaǵı túrli háripler muǵdari: " << (int)s; return 0;
}
Programmada qatar ushın 80 uzınlıǵındaǵı qatar belgileri massivi járiyalanǵan hám onıń mánisi klaviaturadan kiritiledi. Másele tómendegishe sheshiledi. Ishpe-ish jaylasqan tákirarlaw operatorı járdeminde qatar massiviniń hár bir elementi – qatar[i] massiviniń hámme elementleri - qatar[j] menen ústi-
ústine túsiwi yamasa olar bir-birinen 32 sanına parıq etıwı (úlken hám kishi latın háripleriniń kodları ortasındaǵı parıq) jaǵdayları k ózgeriwshisinde sanaladı hám s ulıwmalıq jıyındıǵa 1/k mánisi menen qosıladı. Programma sońında bir-birinen ajıratıwshı probel belgisi sheklep ótiledi.
Programmaǵa
qatardaǵi túrli háripler muǵdarı
qatar kiritilse, ekranǵa juwap sıpatında
Qatardaǵı túrli háripler muǵdarı: 13
qatari shıǵarıladı.