17115

Використання бібліотечних функцій для роботи із символьними даними

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота № 24 Тема: Використання бібліотечних функцій для роботи із символьними даними Ціль роботи: виробити практичні навички в написанні програм з використанням бібліотечних функцій для роботи із символьними даними. Обладнання: ПКПО Borland C Теоретичн...

Украинкский

2013-06-29

79.5 KB

1 чел.

Лабораторна робота № 24

Тема: Використання бібліотечних функцій для роботи із символьними даними

Ціль роботи: виробити практичні навички в написанні програм з використанням бібліотечних функцій для роботи із символьними даними.

Обладнання: ПК,ПО Borland C++

Теоретичні відомості

Функції для роботи із символьними даними

Для роботи із символьними даними розроблений ряд бібліотечних функцій. Розглянемо деякі з них:

char *strcat(char *dest, const char   *src); - додає копію рядка src у кінець dest. Довжина результуючої рядка дорівнює strlen(dest) + strlen(src).

strcat() - повертає покажчик на результуючу рядок.

Функція char *strchr(const char *s, int c); - переглядає рядок у прямому напрямку для відшукання в ній заданого символу. Функція strchr() шукає перше входження символу з у рядок s. Символ кінця рядка вважається частиною рядка, тому - strchr(strs, 0) поверне значення покажчика на нульовий кінцевий символ рядка strs. Функція strchr() повертає покажчик на перше входження символу с в s, якщо c не виявлений у s, те strchr() повертає нуль.

int strcmp(const char *s1, const char *s2); - здійснює беззнакове порівняння рядків s1 і s2, починаючи з першого символу кожного рядка, доти, поки чергові відповідні символи в рядках не будуть різні чи поки не будуть досягнуті кінці рядків. Функція strcmp() повертає значення:

< 0     якщо s1 менше ніж s2;

= = 0    якщо s1 дорівнює s2;

> 0     якщо s1 більше чим s2.

int strcmpi(const char *s1, const char *s2); - порівнює один рядок з інший аналогічно strcmp(), але без розходження великих і маленьких букв. Функція strcmpi() визначений як макрос у string.h і перетворить виклики strcmpi() до викликів strcmp(). Макрос забезпечує сумісність з іншими компіляторами С.

int strncmp(const char *s1, const char *s2, size_t maxlen); - порівнює частина одного рядка з частиною іншої. Функція strncmp() робить таке ж беззнакове порівняння, як і strcmp(), але переглядає не більш, ніж maxlen символів. Вона починає з першого символу кожного рядка і закінчує, коли чергові символи в рядках різні чи коли перевірено maxlen символів. Функція strncmp() повертає значення типу int, зміст якого аналогічний strncmp().

char *strcpy(char *dest, const char *src); - копіює рядок src у dest, завершуючи роботу після копіювання символу закінчення рядка. Функція strcpy() повертає покажчик на результуючу рядок (dest).

size_t strcspn(const char *s1, const char *s2); - шукає в рядку перший сегмент, що не містить жодного символу з заданого набору символів. Функція strcspn() повертає довжину першого сегмента рядка, що зустрівся, s1, що складається тільки із символів, що не входять у рядок s2.

size_t strlen(const char *s); - обчислює довжину рядка s. Функція strlen() - повертає число символів у s, не вважаючи символ кінця рядка.

char *strlwr(char *s); - перетворить букви  верхнього регістра (А-Z) рядка s у букви нижнього регістра (a-z). Інші символи не змінюються. Функція strlwr() повертає покажчик на рядок s.

char  *strnset(char  *s,  int  ch, size_t n); - заміняє задана кількість символів n у рядку s на зазначений символ ch. Функція strnset() копіює символ ch у перші n байтів рядка s. Якщо n > strlen(s), тоді strnset() заміняє, усі символи і зупиняється, коли досягнуть кінець рядка (виявлений нульовий символ).

Функція strnset() - повертає покажчик на змінений рядок s.

char *strpbrk(const char *s1, const char *s2); шукає в рядку перше входження будь-якого символу з переданого функції набору символів. Функція strpbrk() - здійснює пошук у рядку s1 першого входження кожного із символів, обумовлених рядком s2. Функція strpbrk() - повертає покажчик на перше входження будь-якого символу рядка s2. Якщо жоден символ із символів s2 не виявлений у s1, то функція повертає нуль.

char *strrchr(const char *s, int ch); - шукає в рядку останнє входження заданого символу. Функція strrchr() перевіряє рядок s у зворотному напрямку, роблячи пошук заданого символу. Функція strrchr() знаходить останнє входження символу ch у рядок s. Передбачається, що символ закінчення рядка є частиною рядка. Функція strrchr() повертає покажчик на останнє входження символу ch. Якщо ch не виявлений  у s,  то strrchr() повертає нуль.

char *strrev(char *s); - перевертає рядок. Функція strrev(), переустановлює всі символи в рядку в зворотному порядку, за винятком завершального нульового символу. Наприклад, "строка\0" буде перетворена в "акортс\0". Функція strrev() повертає покажчик на перевернений рядок.

char *strset(char *s, int ch); - заміняє всі символи рядка s на заданий символ ch, закінчуючи роботу при виявленні символу кінця рядка. Функція strset() - повертає покажчик s на результуючу рядок.

char *strstr(const char *s1, const char *s2); - здійснює пошук у рядку s2 перші входження в неї підстроки s1. Функція strstr() - повертає покажчик на елемент у рядку s2, з якого починається s1 (покажчик на s1 у s2). Якщо s1 не виявлена в s2, то strstr() повертає нуль.

Приклад

/*    ЗАНЯТТЯ N 12

  Розробив Петров Ю.В.

Використання бібліотечних функцій для обробки символьних даних.

Виконать  сортування елементів масиву list[N][4], використовувати

функції strcpy(), qsort(), strcmp(), stricmp(). Розробити функцію

порівняння рядків з обліком і без обліку регістра -sort_function().  */

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#define N 8

int sort_function( const void *a, const void *b);

char list[N][4]={"1a3","d34","1c4","235","2h5","012","135","102"};

  //list[N][4]-глобальний масив

int registr=1;  //Глобальна перемінна для керування режимом

 //роботи функції sort_function(): 0 -з урахуванням регістра, 1-без

int main(void)

{ clrscr();

 int i,j;

 char *pch=NULL;

  printf("\n\tисходный (глобальний) масив char list[N][4]:\n");

 for (і=0; і<N; і++)  printf("%s ", list[і]);

 printf("\n");

 for (і=0; і<N; і++)                  //Сортування масиву

    for (int j1=і+1;j1<N;j1++)

     {j=sort_function((void *)list[і], (void *)list[j1]);

      if(j>0)  //Заміна рядків: char *strcpy(char *dest,

{ strcpy(pch,list[i]);         // const char *src);

  strcpy(list[i],list[j1]);

  strcpy(list[j1],pch);

}

     }

 printf("\n\tрезультат сортування:\n");

 for (і=0; і<N; і++) printf("%s ", list[і]);

 printf("\n");

 printf("\n\tисходный (локальний) масив char list[N][4]:\n");

 char list[N][4]={"abc","cad","tre","Cab","abb","Abc","cam","Cap"};

 for (i=0; i<N; i++) printf("%s ",list[i]);

 printf("\n");

 qsort((void *)list, N, sizeof(list[0]), sort_function);

  //Функція використовує для сортування алгоритм quicksort

  // void qsort(void *base, size_t nelem, size_t width,

  //int (*fcmp)(const void *, const void *));

 printf("\n\tрезультат сортування без обліку регістра:\n");

 registr=1;

 for (i=0; i<N; i++)  printf("%s ",list[i]);

 printf("\n");

 registr=0;

 qsort((void *)list, N, sizeof(list[0]), sort_function);

 printf("\n\tрезультат сортування c обліком регістра:\n");

 for (і=0; і<N; і++)  printf("%s ",list[і]);

 printf("\n");

// Функції  strrev() strcat()

char *s = "Герой ";

char *m = "- Gerakl";

char *t = "retro";

char *sapr = "cae";

printf("\t Вихідний рядок :    %s \n", t);

char *g = strrev(t);

printf("\t Перевернений рядок: %s \n", g);

s = strcat(s,m);//char *strcat(char *dest, const char *src);

printf("\t Конкатенація рядків : %s\n",s);

getch();

return 0;

}

int sort_function(const void *a, const void *b)

 { if (registr==0) //C обліком регістра

      return( strcmp((const char *)a,(const char *)b ));

//int strcmp(const char *s1, const char*s2); Повертає:

// (<0) якщо s1<s; (==0) якщо s1==s2; (>0)  якщо s1>s2

   else             //Без обліку регістра

      return( stricmp((const char *)a,(const char *)b ));

 }

/*  Вихідний (глобальний) масив char list[N][4]:

   1a3 d34 1c4 235 2h5 012 135 102

Результат сортування:

   012 102 135 1a3 1c4 235 2h5 d34

   Вихідний (локальний) масив char list[N][4]:

   abc cad tre Cab abb Abc Cap cam

Результат сортування без обліку регістра:

   abb Abc abc Cab cad cam Cap tre

Результат сортування c обліком регістра:

   Abc Cab Cap abb abc cad cam tre

Вихідний рядок :    retro

Перевернений рядок: orter

Конкатенація рядків : Герой - Gerakl      */

Приклад програми на С++

Скласти програму для обробки масивів відповідно до індивідуального завдання приведеному в таблиці 10.1.

Вар.

Умова задачі

6

Дано масив X(25). Сформувати новий масив з чисел вихідного, лежачих в інтервалі [-3,7]

#include<iostream.h>

void main(int argc, char*argv[])

{int r=1;

for(int k=1;k<argc;k++)

{if(r==3) {cout<<"не "; r=0;}

 cout<<argv[k]<<' ';

 r++;

}

}

Хід роботи

Вивчити теоретичні відомості

Відповідно до індивідуального завдання розробити алгоритм рішення задачі. Результати обробки рядків (виділені елементи) представити в масиві покажчиків. Забезпечити можливість передачі даних з оточення (з командного рядка). При роботі з рядками використовувати функції пошуку одиночних символів і послідовностей у заданому рядку.

1.Розробити програму.

2.Набрати програму на комп'ютері, налагодити її і вивчити роботу операторів.

3.Одержати результати.

4.Оформити звіт.

5.Підготуватися до захисту лабораторної роботи, вивчивши питання по даній темі.

Вимоги до змісту звіту приведені в лабораторній   роботі   №1.

Індивідуальні завдання

Скласти програму за індивідуальним завданням. Ввести, отредагувати, виконати програму, записати на гнучкий диск.

№ варіанту

Завдання.

1

Розташувати елементи масиву в порядку збільшення. Відшукати minелемент

2

Розташувати елементи масиву в порядку зменшення. Відшукати mах елемент

3

Розташувати елементи масиву в порядку збільшення. Відшукати max елемент

4

Розташувати елементи масиву в порядку зменшення. Відшукати min елемент

5

Розташувати елементи масиву в порядку зменшення Відшукати середній елемент

6

Розташувати елементи масиву в порядку зменшення. Відшукати другий елемент.

7

Розташувати елементи масиву в порядку зменшення Відшукати третій  елемент

8

Розташувати елементи масиву в порядку зменшення.. Відшукати 4 елемент

9

Розташувати елементи масиву в порядку зменшення.. Відшукати 5 елемент.

10

Розташувати елементи масиву в порядку зменьшення,. Відшукати 6 елемент

11

Розташувати елементи масиву в порядку меншення Відшукати 7 елемент

12

Розташувати елементи масиву в порядку зменшення.. Відшукати 8 елемент

13

Розташувати елементи масиву в порядку збільшення Відшукати 9 елемент

14

Розташувати елементи масиву в порядку збільшення Відшукати 10 елемент.

15

Розташувати елементи масиву в порядку збільшення Відшукати 10 елемент.

16

Розташувати елементи масиву в порядку збільшення. Відшукати 8 елемент.

17

Розташувати елементи масиву в порядку збільшення  Відшукати 7 елемент.

18

Розташувати елементи масиву в порядку збільшення. Відшукати 6 елемент.

19

Розташувати елементи масиву в порядку збільшення. Відшукати 5 елемент

20

Розташувати елементи масиву в порядку збільшення. Відшукати 4 елемент.

Контрольні запитання

1.Який заголовний файл необхідний для роботи з бібліотечними функціями обробки символьних даних?

2.Який символ необхідний наприкінці рядка для нормальної роботи з рядками?

3.Що означає модифікатор const при оголошенні формальних параметрів функцій?

4.Для чого можна використовувати масив покажчиків при роботі із символьними даними?

5.Поясните формати приведених у теоретичній частині функцій.

6.Що означає буква n у функціях strncmp(), strnset()?

7.Що означає буква i у strcmpi()?

8.Що означає додаткова буква r у функції strrchr()?

9.Що адресує покажчик на n-ный символ у рядку?


 

А также другие работы, которые могут Вас заинтересовать

62889. Я здоровье берегу – сам себе я помогу 24.15 KB
  Цели урока: Сформировать представление о здоровье как одной из главных ценностей человеческой жизни; Познакомить детей с правилами, помогающими сохранить собственное здоровье на долгие годы.
62891. Хочу всё о животных знать! 27.25 KB
  Цель: развивать творческие способности детей; развивать мышление и сообразительность интерес к природе животным; воспитывать уважение друг к другу командный дух; Оборудование: сигнальные карточки; карточки с вопросами и вариантами ответов...
62893. Свобода – выбор разумной личности 29.5 KB
  Цель: формирование у учащихся правовых норм как регуляторов поведения человека в обществе и отношений между личностью и государством, требующих самостоятельного, осознанного выбора поведения и ответственности за него.
62894. Внеклассное мероприятие: «Быть уверенным – здорово!» 32.98 KB
  Взаимной зависимости, ответственности, контроля не наблюдается. В эмоциональных личных отношениях заметны некоторые симпатии и антипатии, хотя ученики стараются это особо не афишировать.
62896. Умелые руки не знают скуки 49.38 KB
  Цель: Активизация творческих способностей учащихся, поддержание интереса к предмету; совершенствование умений работать самостоятельно и в коллективе.