- •Модуль 1. Складені типи даних
- •Опорний конспект
- •Тренувальні вправи
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лекція 2.
- •Опорний конспект
- •Тренувальні вправи
- •Контрольні запитання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Практична робота №1(1)
- •Завдання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Практична робота №1(2)
- •Завдання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лабораторна робота №1(1)
- •Завдання для виконання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лабораторна робота №1(2)
- •Завдання для виконання
- •Лекція 3
- •Опорний конспект
- •Тренувальні вправи
- •Задачі для самостійного розв’язання
- •Контрольні запитання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лекція 4
- •Опорний конспект
- •Тренувальні вправи
- •Контрольні запитання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Практична робота №2(1)
- •Завдання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Практична робота №2(2)
- •Завдання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лабораторна робота №2(1)
- •Виконання роботи
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лабораторна робота №2(2)
- •Завдання для виконання
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лабораторна робота №2(3)
- •Виконання роботи
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лабораторна робота №2(3)
- •Виконання роботи
- •Завдання та методичні вказівки для самостійної роботи студента
- •Лекція 5
- •Опорний конспект
- •Тренувальні вправи
- •Тренувальні вправи
- •Завдання та методичні вказівки для самостійної роботи студента
- •Література
Тренувальні вправи
1. Скласти програму, яка визначає чи є символ малою літерою латинського алфавіту. Алгоритм розв’язання: _______________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ Код програми:
|
2. Написати програму, яка рахує кількість введених символів. Алгоритм розв’язання: _______________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ Код програми:
|
Контрольні запитання
№ |
Питання |
Відповідь |
1 |
Методи ініціалізації рядкового типу даних. |
|
2 |
Способи введення та виведення рядків. |
|
Завдання та методичні вказівки для самостійної роботи студента
Вивчити теоретичний матеріал лекції, дати відповіді на контрольні запитання.
Розв’язати задачі №9.5 [1, ст. 109]
Лекція 6
Тема. Основні функції роботи з рядковим типом даних
Мета. Отримати знання про рядковий тип даних, навчитися створювати найпростіші програми з рядковим типом даних.
ОПОРНИЙ КОНСПЕКТ
Для опрацювання масивів символів у мові С++ є стандартні функції, які описані у модулі string.h. Розглянемо деякі з них.
strlen(<рядок>) – визначає фактичну кількість символів у рядку, застосовується у виразах; |
strcat(r1, r2) – команда з’єднання рядків r1, r2 в один рядок, результат присвоює змінній r1; |
strncat(r1, r2, n) – до змінної r1 додає перших п символів рядка r2, команда; |
strcpy(r1, r2) – копіює символи з рядка r2 в рядок r1, команда; |
strncpy(r1, r2, n) – копіює перших n символів рядка r2 в рядок r1, команда; |
strchr(r1, <символ>) – визначає перше входження деякого символу у рядок r1 так: повертає рядок, який починається від першого входження заданого символу до кінця рядка r1, застосовується у виразах; |
strrchr(r1, <символ>) – визначає останнє входження заданого символу у рядок, застосовується у виразах; |
strspn(r1, r2) – визначає номер першого символу, який входить у рядок r1, але не входить у рядок r2, застосовується у виразах; |
strstr(r1, r2) – визначає в рядку r1 підрядок, що починається з першого входження рядка r2 у рядок r1, застосовується у виразах; |
strtok(r1, r2) – визначає частину рядка r1, яка закінчується перед першим однаковим символом рядків r1 та r2; |
strnset(r1, <символ>, n) – вставляє n разів заданий символ перед рядком r1, застосовується у виразах; |
strupr(r1) – перетворює усі малі літери рядка у великі; |
strlwr(r1) – перетворює усі великі літери рядка у малі; |
strrev(r1) – записує рядок у зворотному порядку. |
Приклад 2. Розглянемо результати застосування функцій до таких змінних:
char Lviv[] = “Львівська політехніка”,
Un[30] = “НУ”,
r1[30] = “”;
char *p; int n;
Застосування функцій |
Результат |
n = strlen(Lviv) |
|
strcat(Un, Lviv) |
|
strncat(Un, Lviv, 10) |
|
strcpy(r1, Lviv) |
|
strncpy(r1, Lviv, 10) |
|
p = strchr(Lviv, ‘П’) |
|
p = strrchr(Lviv, ‘i’) |
|
n = strspn(Lviv, “Львів”) |
|
p = strstr(Lviv, “тех”) |
|
p = strtok(Lviv, “кс”) |
|
p = strnset(Lviv, ‘x’, 10) |
|
p = strupr(“I Love You”) |
|
p = strlwr(“I Love You”) |
|
p = strrev(“техніка”) |
|
Зауваження 2. Функції перетворення літер strlwr і strupr діють лише для латинського алфавіту. Крім того, у деяких версіях мови С++ ці функції можуть записуватись інакше: _strlwr, _strupr.
У бібліотеці stdlib.h є стандартні функції перетворення типів даних. Зокрема, функція atoi(r1) перетворює рядок символів r1 у дане цілого типу int, а функція іtoа(<числове дане>, r1, <система числення>) – дане цілого типу int у рядок r1. Для перетворення даних типу double у рядок символів визначена функція gcvt(<числове дане>, <кількість знаків у числі>, r1), а обернену дію виконує функція strtod.
Приклад 3. Розглянемо результати дії цих функцій для оголошених нижче змінних.
int n;
double f;
char r1[5], *p;
Застосування функції |
Результат |
n = atoi(“12”) |
|
itoa(12, r1, 10) |
|
gcvt(-3.14, 4, r1) |
|
f = strtod(“-3.1415”, &p) |
|
Рядки символів можна порівнювати між собою. Два рядки порівнюють зліва направо посимвольно, причому ‘А’ < ’В’, ‘В’ < ‘С’ тощо. Більшим вважається символ, який розміщений в алфавіті далі (він має більший номер у таблиці кодів ASCII, див. далі). Для порівняння рядків у модулі string.h надані такі функції:
strcmp (r1, r2) – порівнює рядки символів r1 і r2 з урахуванням регістра для латинського алфавіту;
stricmp (r1, r2) – порівнює рядки r1 і r2, не розрізняючи великих і малих літер латинського алфавіту.
Результатом виконання цих функцій є від’ємне число (якщо рядок r1 менший від рядка r2), 0 (якщо рядки однакові) або додатне число (рядок r1 менший від рядка r2).
Приклад 4. Розглянемо результат дії функцій
Функція |
Результат |
n = strcmp(“Весна”, “весна”) |
|
n = strcmp(“весна”, “Весна”) |
|
n = strcmp(“Весна”, “Весна”) |
|
n = strіcmp(“Весна”, “весна”) |
|
n = strіcmp(“Vesna”, “vesna”) |
|
Задача 1 (про довжину фрази). Увести рядок символів та визначити його довжину.
Зробимо це двома способами:
за допомогою вказівника типу char і виділення динамічної пам’яті:
#include <iostream.h> // Довжина рядка символів
void main()
{
char *s; // Оголошуємо вказівник на рядок
s = new char[50]; // Виділяємо пам’ять для введення рядка
cin >> s;
int d = 0;
while (*s++) d++;
cout << d;
}
визначивши різницю адрес першого й останнього символів:
#include <iostream.h> // Довжина рядка символів void main() { char *s, *p; // Оголошуємо вказівник на рядок s = new char[50]; // Виділяємо пам’ять для введення рядка cin >> s; p = s; // Вказівник р вказує на перший символ рядка // Вказівник s тепер вказуватиме while (*s++); // на останній символ рядка int d; // Визначаємо довжину рядка як різницю адрес d = s – p + 1; cout << d; } |
Задача 2 (про пошук слова у фразі). Нехай задано рядок "Скоро будуть канікули". Визначити довжину рядка. Вивести на екран друге слово цього рядка.
#include <iostream.h> // Пошук другого слова за допомогою функцій #include <string.h> void main() { char r1[] = “Скоро будуть канікули”; char *p; cout << r1 << “\n”; cout << “Довжина рядка r1 = ” << strlen(r1) << “\n”; // Встановлюємо вказівник р на перший пропуск p = strchr(r1, ‘ ‘); // у рядку r1 // З рядка р вилучаємо всі символи після його strtok(p, “ “); // першого пропуску cout << p; } |
Подамо ще один спосіб розв’язання задачі 2, в якому рядок розглядається як масив символів і функції для роботи з рядками не використовуються.
#include <iostream.h> // Рядок як масив символів #include <conio.h> #include <string.h> void main() { clrscr(); char r1[] = “Скоро будуть канікули”; char *p; int n1, n2, k, m; m = 0; k = strlen(r1); cout << “Довжина рядка r1 = ” << k << “\n”; for (int i = 0; i < k; i++) // Переглядаємо всі символи рядка if (r1[i] == ‘’) // Шукаємо пропуск { m++; // Визначаємо номери першого if (m == 1) n1 = i; // та другого if (m == 2) n2 = i; // пропусків } // Виводимо слово між двома пропусками for (i = n1 + 1; i < n2 – 1; i++) cout << r1[i]; getch(); } |