You are on page 1of 6

10 РОБОТА З РЯДКАМИ

Мета: Здобути практичні навички роботи з рядковим типом даних.

10.1 Короткі теоретичні відомості


З погляду математики рядок – це послідовність символів. У мові C++ є
кілька способів зображення рядків. Далі розглянемо два з них: C-рядки та тип
string.
C-рядок – це зображення послідовності символів у масиві символів з
доданим маркером кінця '\0'.
Значенням C-рядка (англ. – C-string value) є послідовність символів від
його початку, обмежена найближчим '\0'. Під час виконання програми C-рядок,
будучи масивом символів, ідентифікується адресним виразом, що задає адресу
даних типу char.
Рядкова константа, наприклад "abc", зображується в пам'яті як C-рядок,
тобто масивом із чотирьох (а не трьох!) символів. До байтів із символами 'a', 'b',
'c' додається ще один – з нуль-символом '\0'. У пам'яті програми константа "abc"
задається адресою першого байта цієї послідовності байтів. Звідси рядковою
константою можна ініціалізувати масив символів або присвоїти чи
ініціалізувати нею вказівник типу char*.
Операція cout<<s, де s – ім'я масиву, тип якого не є символьним, виводить
значення вказівника s, тобто деяку адресу. Проте, якщо s – масив символів, то
операція виводить його рядкове значення. Узагалі, якщо AE – адресний вираз
типу char*, то операція вигляду cout<<AE виводить рядкове значення C-рядка –
від байта, на який указує адресний вираз, до байта перед найближчим символом
'\0'. Наприклад, якщо вказівник p встановлено на рядкову константу "12345", то
вираз
cout << p << '::' << p+2
виводить символи 12345::345.
Під час уведення в масив символів, тобто в змінну, наприклад s, операція
вставлення з потоку cin>>s, як і для інших типів, пропускає порожні символи
(пропуск, табуляція, кінець рядка), переписує в масив s непорожні до
найближчого порожнього й дописує до них символ '\0'.
У мові C++ для зображення рядків є стандартний бібліотечний тип string.
Для роботи з ним необхідно включити файл <string> і скористатися простором
імен std. Тип string насправді є класом, а змінні цього типу – об'єктами.
Аналогічно С-рядкам, рядкове значення змінної типу string – це
зображена нею послідовність символів. Змінні типу string можна ініціалізувати
за допомогою рядкових констант, С-рядків, ідентифікованих іменем масиву

74
символів або вказівником на символи, та інших змінних типу string.

10.2 Завдання
Визначити суму усіх голосних букв у рядку .

10.3 Хід роботи

10.3.1 Постановка задачі


Дано: S ∈ string row ;
Визначити: K ∈ℕ .

10.3.2 Математична модель інформаційного процесу

length(S )
K= ∑
i =0 {
1,if S i∈{ AEIOUaeiou }
0,if S i∉{ AEIOUaeiou }
(10.1)

10.3.3 Метод реалізації інформаційного процесу


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

10.3.4 Алгоритм реалізації інформаційного процесу

75
Початок

k=0

i=0, n−1

S∈ так
{AEIOUaeiou}

ні k++

Кінець
Рисунок 10.1 — Алгоритм обчислення

10.3.5 Програмування
Побудова таблиці ідентифікаторів.

Таблиця 1.1 — Таблиця ідентифікаторів


№ Змінна або № Змінна або
Ідентифікатор Ідентифікатор
з/п константа з/п константа
1 S S 5
2 K k 6
3 7
4

Запуск середовища розробки програмного забезпечення:


• Запустити Visual Studio.
• У середовищі створити новий проект C++: File → New → Project
→ Console Application.
Введення тексту програми:

76
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("Hello World!");
int k = 0;
for (int i = 0; i < s.length(); i++)
{
strchr("AEIOUYaeiouy", s[i]) ? k++ : k += 0;
}
cout << k << endl;
getchar();
return 0;
}
Запуск програми на виконання: F5.

10.3.6

10.3.7 Обчислення, обробка і аналіз результатів


У ході виконання даної роботи отримано наступні результати: 3, що при
прямому аналізі співпадає.

10.4 Програми та обладнання.


У даному підрозділі студент описує обладнання, програмні продукти та
складові, що були використані при опрацюванні даної лабораторної роботи.

10.5 Висновки.
У даному підрозділі студент робить висновки за опрацюванням даної
лабораторної роботи з урахуванням поставленої мети.

10.6 Задачі до виконання

1. Написати функцію, що видаляє усі пробіли у рядку.


2. Написати функцію, що відсікає всі пропуски в кінці рядка.
3. Написати функцію, що дзеркально перевертає рядок.
4. Написати функцію визначення, чи є рядок паліндромом, тобто
симетричною послідовністю символів.
5. Написати функцію визначення, чи є рядок подвоєним рядком, тобто має
вигляд ww, де w – деяка послідовність символів, можливо, порожня.

77
6. Рядок містить слова, відокремлені одне від одного проміжками (у
довільній кількості). Написати функцію, яка: а) визначає кількість слів у рядку;
б) визначає довжину найдовшого слова рядка; в) дзеркально перевертає кожне
слово рядка; г) вилучає з рядка всі слова, що містять менше п'яти літер.
7. Написати функцію, яка визначає множину символів, наявних у рядку.
8. Написати функцію, яка визначає множину символів, що входять у рядок
рівно по одному разу.
9. Написати функцію, яка за двома рядками визначає: а) чи збігаються
множини символів, наявних у заданих рядках; б) чи є множина символів
першого рядка підмножиною множи-ни символів другого.
Таблиця 10.1 — Варінати індивідуальних завдань
№ варіанту Задача 1 Задача 2 Задача 3
1. 1 3 6
2. 1 3 7
3. 1 3 8
4. 1 3 9
5. 1 4 6
6. 1 4 7
7. 1 4 8
8. 1 4 9
9. 1 5 6
10. 1 5 7
11. 1 5 8
12. 1 5 9
13. 2 3 6
14. 2 3 7
15. 2 3 8
16. 2 3 9
17. 2 4 6

78
18. 2 4 7
19. 2 4 8
20. 2 4 9
21. 2 5 6
22. 2 5 7
23. 2 5 8
24. 2 5 9

79

You might also like