193
ЛАБОРАТОРИЯЛЫҚ ЖҰМЫС №6
Тақырыбы: С/С++ ТІЛІНДЕ ЖОЛДЫҚ ҚАТАРЛАРДЫ ӨҢДЕУ
Мақсаты: Студентттерді С/С++ тіліндегі жолдық қатарларды өңдеуге арналған
негізгі функциялармен таныстыру.
Қажетті материалдар мен жабдықтар: ДК, лабораториялық жұмысты
орындауға арналған әдістемелік нұсқаулар.
Лабораториялық жұмыстың мазмұны және орындалу реті:
1. С/С ++ тілінде жолдармен жұмыс жасауға қатысты келтірілген әдістемелік
нұсқау – матриалдарды алдын- ала танысып меңгеру.
2. Ұсынылған мысалды орындау және талқылау.
3. Өзіндік жеке тапсырмалардың оқытушы ұсынған нұсқасын орындау.
4. Лабораториялық жұмыстың есебін (отчет) дайындап тапсыру.
Әдістемелік нұсқау:
С/С++ тілдерінде Турбо Паскаль тіліндегідей жолдық тип жоқ. Жолдар соңғы
элементі \0 литеры болатын литерлер массиві ретінде ұйымдастырылады. С
тіліндегі литерлік массивтің ұзындығы шектелмеген.
Жол литерлік массив түрінде сипатталады.
Мысалы:
char STR[20];
Жолдарды енгізу-шығару функциялары
gets ( ), puts ( ), fgets ( ), fputs ( ), sprintf ( )
gets ( ) функциясы литерлерді енгізу құрылғысынан қабылдап, аргумент
ретінде алынған массивке орналастырады. Енгізуді аяқтаған (Enter пернесін
басқан) кезде, жаңа жол литері (\n) алынады. gets ( ) функциясы оны нольдік
литерге (\0) айналдырады.
gets ( ) функциясын қолданған кезде енгізілген литерлер саны массив
өлшемінен асып кететіндігін анықтау мүмкіндігі жоқ екендігін есте сақтаған жөн.
puts ( ) функциясы gets ( ) функциясының көмегімен енгізілген жолды экранға
шығарады. Ол нольдік литерді, керісінше, жаңа жол литеріне ауыстырады.
fgets ( ) функциясы gets ( ) функциясына ұқсас, бірақ массив өлшеміне сәйкес
клавиатурадан енгізілетін литерлер санын бақылап отыруға мүмкіндік береді.
Литерлер қандай да бір файлдан немесе стандартты енгізу құрылғысынан (stdin)
оқылады. Енгізілген литерлер саны массив өлшемінен бір бірлікке аз болуы керек,
өйткені соңғы позицияға автоматты түрде нольдік литер орналасады. fgets ( )
функциясымен бірге fputs ( ) функциясы қолданылады. Бұл функция литерлерді
файлға немесе стандартты шығару құрылғысына (stdout) бағыттайды.
194
sprintf ( )
(string
printf(),
яғни
printf()
жолдық)
функциясы
printf()
функциясындағыдай
форматтау
спецификаторлары
қолданылады.
Айырмашылығы sprintf ( ) функциясы нәтижені экранға емес, берілген массивке
орналастырады. Бұндай жағдай нәтижені, айталық экранға және принтерге
бірнеше рет шығару кезінде тиімді болуы мүмкін.
Жолдармен жұмыс істеуге арналған негізгі функциялар (string.h, stdlib.h)
Функция
Прототипі және атқаратын қызметі
Atof
double atof (char *str);
str жолын double типті нақты санға түрлендіреді
Atoi
int atoi (char *str);
str жолын ондық бүтін санға түрлендіреді
Itoa
char *itoa (int v, char *str, int baz);
v бүтін санын str жолына түрлендіреді. Санды бейнелеу кезінде
baz (2 ≤ baz ≤ 36) негізі қолданылады.
Strcat
char *strcat (char *sp, char *si);
si жолын sp жолына тіркеп жазады (конкатенация)
Strncat
char *strncat (char *sp, char *si, int k);
si жолының k литерін sp жолына тіркеп жазады (конкатенация)
Strchr
char *strchr (char *str, int c);
str жолында c литерінің алғашқы енуін анықтайды
Strrchr
char *strnchr (char *str, int c);
str жолында c литерінің соңғы енуін анықтайды
Strcmp
int strcmp (char *str1, char *str2);
str1 және str2 жолдарын салыстырады. Егер str1 < str2 болса,
нәтиже теріс; егер str1 = str2 болса, нәтиже нольге тең және егер
str1 > str2 – нәтиже оң.
Strncmp
char *strncmp (char *str1, char *str2, int k);
str1 және str2 жолдарының алғашқы k литерін салыстырады.
Егер str1 < str2 болса, нәтиже теріс; егер str1 = str2 болса,
нәтиже нольге тең және егер str1 > str2 – нәтиже оң.
Strcpy
char *strcpy (char *sp, char *si);
si жолын байттарын sp жолына көшіреді.
Strncpy
char *strncpy (char *sp, char *si, int k);
si жолының k литерін sp жолына көшіреді.
Strlen
unsigned strlen (const char *str);
str жолының ұзындығын анықтайды
Strlwr
char *strlwr (char *str);
Жолдағы жоғарғы регистр әріптерін сәйкесінше төменгі
регистрге ауыстырады.
Strupr
char *strupr ( char *str);
Жолдағы төменгі регистр әріптерін сәйкесінше жоғарғы
регистрге ауыстырады.
195
Strset
char *strset (char *str, int c);
str жолын c литерімен толтырады
Strnset
char *strnset (char *str, int c, int kol);
str жолының алғашқы k литерін c литерімен ауыстырады
Strstr
char *strstr (const char *str1, const char *str2);
str1 жолыннан str2 жолын іздейді. Көрсеткішті str1 жолының
str2 жолы басталатын элементіне қайтарады
Мысал. Жол берілген. Жолдағы әрбір сөзді қиып алып, кері ретпен шығару
Есептің қойылуы. Жолдағы сөздерді бөліп тұратын символдар үшін razd,
берілген жолды енгізу үшін p, ал сөздерді қиып алу үшін t символдық массивтерін
аламыз.
l – ажыратқыштардан тұратын массив ұзындығы, dt – әрбір сөздің ұзындығы.
i, j, r – цикл параметрлері.
m – әрбір сөздегі әріптер саны.
С тіліндегі программасы
#include
#include
#define size 100
main()
{ int i,j,k,r,l,dt,m=0;
//Сөйлемдегі сөздерді ажырату белгілерінен тұратын символдық массив
char razd[]={' ','"',',','?',';',':','.','!','-','+','/','(',')','[',']','{','}','~','^','<','>','=','\0'};
char c, p[size],t[size]="";
gets(p);
l=strlen(razd);
for(j=0;j<=strlen(p)-1;j++)
{k=0;
for(i=0;i<=l-1;i++)
if (p[j]==razd[i]) k=1;
if (k==0) {t[m]=p[j]; m++;}
else if(m!=0) { printf("\n%s - ",t);
Достарыңызбен бөлісу: |