Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Лабораторна робота №5 Програмування задач по обробці послідовності символів




Мета роботи

Одержання знань і навиків, необхідних для роботи з символьною інформацією

Завдання на лабораторну роботу

1. Ознайомитися з теоретичними відомостями даної лабораторної роботи.

2. Скласти та виконати на ПЕОМ програми з таблиці 5.1 відповідно до варіанту.

3. Оформити звіт та захистити роботу.

 

Таблиця 5.1 – Індивідуальні завдання до лабораторної роботи №5

№ варіанта Номери задач № варіанта Номери задач
  251, 265, 361, 802   257г, 270г, 421б, 811
  252а, 266, 362, 803   257д, 270д, 421в, 812а
  252б, 267, 363, 804а   257е, 312а, 421г, 812б
  253а, 268, 364, 804б   258, 312б, 546а, 812в
  253б, 269а, 365а, 805   259, 313, 546б, 812г
  253в, 269б, 365б, 806а   260а, 314, 546в, 812д
  253г, 269в, 365в, 806б   260б, 315а, 549, 813
  254, 269г, 365г, 807   260в, 315б, 548, 812ж
  255, 269д, 366(1), 808а   261а, 316а, 549, 813
  256а, 269е, 366(2), 808б   261б, 316б, 550, 814а
  256б, 269ж,366(3), 808в   262а, 316в, 551а, 814б
  257а, 270а, 419, 808г   262б, 316г, 551б, 814в
  257б, 270б, 420, 809   263, 316д, 551в, 815
  257в, 270в, 421а, 810   264, 547а, 552а, 816

 

 

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

В мовах С та С++ існують достатньо розвинені засоби для обробки символьної інформації, такі як введення/виведення окремих символів та рядків, функції для визначення належності символів та рядків, об'єднання рядків, перетворення їх.

Рядок - це послідовність символів, що заключенні у подвійні лапки. Транслятор додає в кінець кожного рядка нульовий байт ‘\0’, так що програма, що переглядає рядок, може знайти її кінець.

Приклад:

cout<<“This is character string”;

Кожна рядкова константа, навіть якщо вона ідентична іншій рядковій константі, зберігається в окремому місці пам'яті.

Рядкова константа – це масив символів. Вона має тип char[]. Символьна константа уявляє собою деякий символ в лапках.

Приклад:

‘a’, ‘A’,’7’,’*’.

Символьні константи вважаються данними типу int.

Існує декілька способів визначення рядків: використання рядкових констант, масивів типу char, покажчиків на тип char та масивів, що складаються з символьних рядків.

Приклади:

1. Ініціалізація масива за допомогою рядкової константи:

char m[]=”string”;

Даний оператор ініціалізував зовнішній масив m для вказаного рядка. Аналогічно

char m[]={‘s’,’t’,’r’,’i’,’n’,’g’,’\0’};

ім'я m - покажчик на нульвий елемент масиву:

m = =&m [0]; *m = = ‘s’, *(m+1) = = m [1] = = ‘t’.

2. a) char *l = “string”;

б) static char l[] = “string”;

Опис з масивом б) визиває створення масиву з сьоми елементів (кількість символів у слові string+1 символ, що завершує ‘\0’). Кожний елемент ініціалізується сумісним символом. Компілятор розглядає ім'я l як синонім адреси першого елемента масиву, де l - константа покажчика. Можно використовувати операциї l+1 для ідентифікації наступного елемента маcиву (‘t’). Але не можна використовувати вираз ++l.

Форма з покажчиком а) також визиває створення в статичній пам'яті сім елементів для зберігання рядка. Окрім того, виділяється ще одна чарунка пам'яти для змінної l, яка є покажчиком. Спочатку ця змінна вказує на початок рядка, але її значення може змінюватися. В даному випадку, використовуючи операції збільшення, ++l можно посилатися на елемент ‘t’. Таким чином, у випадку а) ініціалізовано одну змінну типу покажчик.

Приведемо приклад явного задання розміру пам'яти.

Приклад:

char l[7] = “string”;

char name [81];

Масив name буде заповнюватись у процесі роботи, саме тому резервується 80 символів. Якщо кількість елементів в name буде менш ніж 80, то невикористані елементи автоматично ініціалізуються символом нуль.

 

Введення-виведення рядків

Розглянемо найбільш розповсюдженні бібліотечні функції gets() та puts().

Функція gets() отримує рядок з буфера клавіатури. Вона зчитує символи до тих пір, поки не зустріне символ нового рядка (‘\n’). Функція бере вcі символи до знака ‘\n’, приєднує до них нуль-символ та передає рядок програмі, що її визиває.

Приклад:

/* отримання імені * /

main ()

{ char name [81]; /* виділення пам'яти*/

printf ("Як вас звуть? \n");

gets(name); /* ім'я поміщується до масиву name */

cout<<”Гарне ім’я”<<name<<”\n”;

Функція puts() виводить рядок символів на консоль виводу, у неї є тільки один аргумент - покажчик на рядок.

Приклад:

void main () {

char str[]=”Приклад”;

puts (str);

}

Операції над рядками

Для використання наведених далі функцій необхідно додати до програми файл string.h:

#include <string.h>

Таблиця 5.2 – Функції для роботи з рядками

Функція Опис
  char *strcat (st1, st2); char *st1, *st2; Використовується для злиття рядків символів. В результаті st2 заповнюється символами st1 та st2.
  char *strnkat (st1, st2, n); char *st1, *st2; int n; Виконує злиття двох рядків так, що з другого рядка копіює не больш за n символів.
  int strcmp (st1, st2); char *st1, *st2; Порівнює два рядка у лексикографічному порядку. Повертає 0, якщо st1=st2 -1, якщо st1<st2 1, якщо st1>st2  
  int strncmp (st1, st2, n); char *st1, *st2; int n; Порівнює перші n символів двох рядків.
  char *strcpy (st1, st2); char *st1, *st2; Копіює рядок st2 в st1.
  char *strncpy (st1, st2, n); char *st1, *st2; int n; Копіює не більш ніж n символів рядка st2.
  int strlen (str); char *str; Визначає довжину рядка, тобто кількість символів у рядку без завершаючого ‘0’.
  char *strchr (str, c); char *str; int c; Знаходить у вказаному рядку перші входження символа с.
  char *strrchr (str, c); char *str; int c; Знаходить у рядку останнє входження символа с.

 

Продовження таблиці 5.2

  char *strpbrk (st1, st2); char *st1, *st2; Знаходить у рядку st1 деякий із множини символів, що входять до рядка st2.
  char *strspn (st1, st2); char *st1, *st2; Визначає довжину відрізка рядка st1, що містить символи зі множини символів, що входять до рядка st2.
  char *strtok (st1, st2); char *st1, *st2; Виділяє з рядка st1 лексеми, разподілені любим із множини символів, що входять до рядка st2.

Приклад:

/* використання функцій strcat() и strcpy()*/

main ()

{

static char name [80];

static char cpname [80];

static char add [] = “додано до кількості користувачів системи”;

printf(“Вкажіть ваше прізвище.\n”);

gets(name);

strcpy(cpname, name); /*копія прізвища*/

strcat(name, add);

puts(name);

puts(cpname);

puts(add);

}

 

Результати роботи програми:

Вкажіть ваше прізвище.

Іванов

Іванов додано до кількості користувачів системи

Іванов

додано до кількості користувачів системи

 





Поделиться с друзьями:


Дата добавления: 2017-02-25; Мы поможем в написании ваших работ!; просмотров: 242 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Человек, которым вам суждено стать – это только тот человек, которым вы сами решите стать. © Ральф Уолдо Эмерсон
==> читать все изречения...

2346 - | 2196 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.