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-ный символ у рядку?


 

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

22924. ЛЕМА ПРО ДВІ СИСТЕМИ 37.5 KB
  bk – дві системи векторів кожен вектор першої системи лінійно визначається через другу систему. Якщо m k то перша система лінійно залежна. Нехай а1 а2 аm і b1 b2 bk – дві системи векторів кожен вектор першої системи лінійно виражається через другу систему. Якщо перша система лінійно незалежна то m≤k.
22925. Поняття базису 25.5 KB
  aik лінійно незалежна; Всі вектори системи a1 a2 am лінійно виражаються через ai1ai2. Базисом простору Rn називається система векторів a1 a2 an є Rn така що система a1 a2 an лінійно незалежна; Кожний вектор простору Rn лінійно виражається через a1 a2 an. Звідси α1= α2==αn=0 лінійна коомбінація тривіальна і система лінійно незалежна. Будьякий вектор простору лінійно виражається через e1e2en .
22926. Властивості базисів 33.5 KB
  Оскільки при m n система з m векторів лінійно залежна то m≤n. Якщо m n то за означенням базису всі вектори простору а тому і вектори системи e1e2en лінійно виражаються через базис a1 a2 am .Тоді за лемою про дві системи вектори e1e2en лінійно залежні. Отже В просторі Rn будьяка лінійно незалежна система з n векторів утворює базис простору.
22927. Поняття рангу 47.5 KB
  В довільній системі векторів a1a2am візьмемо всі лінійно незалежні підсистеми. Число векторів в цій фіксованій підсистемі будемо називати рангом системи векторів a1 a2 am . Таким чином рангом системи векторів називається максимальна кількість лінійно незалежних векторів в системі. Зрозуміло що ранг лінійно незалежної системи дорівнює числу всіх векторів в системі.
22928. Поняття рангу матриці 28 KB
  Ранг системи векторів a1 a2 am називається горизонтальним рангом матриці або рангом матриці за рядками і позначається . Стовпчики матриці A можна розглядати як m вимірні вектори b1 b2bn з дійсними координатами елементи простору Rm. Ранг системи векторів b1 b2bn називається вертикальним рангом матриці A або рангом матриці A за стовпчиками і позначається rbA.
22929. Поняття базисного мінору 15.5 KB
  Припустимо Поняття базисного мінору. Припустимо Δr деякий мінор порядку r матриці A r≤mr≤n. Мінор порядку r1 матриці називається оточуючим для мінора Δr якщо його матриця містить в собі матрицю мінору Δr .
22930. Існування базисного мінора 21 KB
  Для мінора Δ1 складаються всі можливі оточуючі мінори. Для цього послідовно до мінора Δ1 дописуються всі можливі рядки і всі можливі стовпчики. Якщо всі оточуючі мінори дорівнюють нулю то за означенням мінор Δ1 базисний і процес закінчується . Для мінора Δ2 складаються всі можливі оточуючі мінори послідовно дописуючи всі можливі рядки і стовпчики.
22931. Теорема про базисний мінор та її наслідки 87 KB
  Нехай мінор Δr порядку r є базисним мінором ненульової матриці. Тоді рядки матриці на яких будується мінор Δr лінійно незалежі; всі інші рядки матриці лінійно виражаються через них. Не втрачаючи загальності міркувань можна вважати що базисний мінор будується на перетині перших r рядків і r стовпчиків матриці . Можна вважати що a11 інакше для того щоб це виконалось можна переставити перші r рядків матриці A і при цьому умови теореми не змінюються.
22932. Теорема про ранг матриці 21 KB
  Для будь якої матриці її горизонтальний та вертикальний ранги рівні та співпадають з рангом матриці за мінорами . Це означає що порядок базисного мінора матриці дорівнює k . За теоремою про базисний мінор k рядків матриці A на яких будується базисний мінор лінійно незалежні а решта рядків лінійно виражаються через них.