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


 

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

82509. Общая характеристика правовых систем стран Дальнего Восток 26.29 KB
  К отличительным критериям на основе которых можно определить к какой правовой семье следует отнести ту или иную правовую систему принадлежит также восприятие права как исключительно важного социального инструмента регулирования общественных отношений. Поэтому описание китайского и японского права позволит выявить некоторые важные и характерные элементы общей дальневосточной концепции права. Все западные правовые системы независимо от того относятся ли они к семье романогерманского или общего права едины в том что важнейшие вопросы...
82510. Общая характеристика российской правовой системы 27.03 KB
  То что правоприменители и граждане столь часто подчиняются правовым обыкновениям даже в ущерб соблюдению норм права связано с историческими особенностями с противодействием монгольскому владычеству и с традиционной либеральностью центральной власти по отношению к местной. Система права стала более упорядоченной. Правда остаются весьма болезненными проблемы соответствия законодательства субъектов федеральному законодательству и отсутствия нормативных актов в ряде важнейших отраслей права экологическом незавершенность налоговой кодификации...
82511. Значение сравнительного правоведения как науки и учебной дисциплины 26.7 KB
  Сравнительноправовые исследования в сочетании с традиционными историческим нормативным и социологическим видением права позволяют: вопервых изучить явления правовой действительности которые ранее не охватывались проблематикой правоведения и выйти за национальные рамки своей правовой системы; вовторых взглянуть под особым углом зрения на ряд традиционных проблем юридической науки с учетом тенденций развития права в современном мире. Для юридической науки обращенной прежде всего к национальному праву использование сравнительного...
82512. История сравнительного правоведения 27.8 KB
  Сторонники первого похода рассматривающие его лишь как один из научных методов юриспруденции настаивают на древнем происхождении сравнительного правоведения При этом они указывают что еще античные а позже и средневековые философы и законодатели использовали сравнение как метод исследования в целях решения конкретных проблем. При этом иногда указываются такие конкретные даты как 1869 год год основания французского Общества сравнительного законодательства и реже 1900 год. когда был проведен I Международный конгрес сравнительного права.
82513. Научная, образовательная, практическая функции сравнительного правоведения 24.14 KB
  Сравнительное правоведение как и любая другая наука воздействует на общество. Научная функция Сравнительное правоведение является одним из важнейших поставщиков информации об иностранных правовых системах для всей юридической науки. Кроме этого сравнительное правоведение обладает и самостоятельной научной ценностью особенно в части разработки теории правовой системы. Сравнительное правоведение – один из немногих курсов позволяющих более или менее подробно ознакомиться иными правовыми системами что существенно расширяет профессиональный...
82514. Правовая семья (правовая система) – основное понятие сравнительного правоведения 27.46 KB
  Правовая система как совокупность социальных институтов их функциональных связей и качественных характеристик посредством которых осуществляется правовое регулирование общественных отношений. Наиболее распространен в современной компаративистике термин правовая семья Категория правовая семья служит для обозначения группы правовых систем имеющих сходные юридические признаки позволяющие говорить об относительном единстве этих систем. Понятие правовая семья отражает те особенности некоторых правовых систем которые являются результатом...
82515. Критерии классификации правовых систем (семей) 25.42 KB
  Например в раннегосударственную эпоху критерий был более чем простым правовые системы делились на свои правильные и чужие неправильные. Так по этому критерию можно разграничить христианские мусульманские и языческие правовые системы. компаративистский Компаративистский подход основан на том что правовые системы отдельных государств можно объединить в правовые семьи на основе сходства по следующим критериям: 1. Сходство структуры системы права и системы законодательства системы применения права.
82516. Соотношение сравнительного правоведения с международным публичным и международным частным правом 25.76 KB
  Взаимодействие сравнительного правоведения и МЧП как особых научных дисциплин – широкое понимание Все методы решения коллизии законов предусматривают применение в ряде случаев иностранного закона. Сравнительное правоведение предоставляет в распоряжение МЧП инструментарий позволяющий правильно построить соответствующие институты...
82517. Понятие, формирование и распространение романо-германской правовой семьи 27.53 KB
  К романогерманской правовой семье относятся правовые системы возникшие в континентальной Европе на основе римских канонических и местных правовых традиций. Романогерманская правовая семья – это правовые системы созданные с использованием римского правового наследия и объединенные общностью структуры источников права и сходством понятийноюридического аппарата Формирование. Романогерманская правовая семья имеет весьма длинную юридическую историю.