Урок #7

Робота з рядками

Ініціалізація рядків

Крім масивів, які містять дані звичайних числових форматів, так само існують і масиви символів. Ці масиви містять елементи типу char. Тобто масив, в якому знаходиться слово London буде такий: char londonArr[] { 'L', 'o', 'n', 'd', 'o', 'n'}. У C++ є стандартна бібліотека string.h, яка містить значну кількість функцій для роботи з рядками. Рядок же в свою чергу – це той же масив символів, але останній його елемент – нульовий символ, символ закінчення рядка. Він записується так: \0. Значить, для коректної записи масиву londonArr і його подальшого використання в програмі як рядки, слід додати в кінці нульовий символ. Тепер його ініціалізація буде виглядати так: londonArr[] { 'L', 'o', 'n', 'd', 'o', 'n', '\0'}. Вас може здивувати те, що послідовність символів \0 взята в одинарні лапки, в той час, як ці лапки можуть містити лише один символ. Але послідовність \0 позначає тільки один символ. Точно така ж ситуація з символами \t (табуляції), \n (новий рядок) тощо.

Спосіб ініціалізації рядка по символам виявився злегка незручним, тому в C ++ є більш практична форма запису: londonArr[] { "London"}. В даному випадку компілятор бачить літерал "London" як рядок, тому сам розподілить символи в окремі елементи масиву, а так само в кінець вставить нульовий символ.

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

Вже добре знайомі нам функції введення і виведення так само вміють працювати і з рядками. Тільки є деяка особливість: функція cin зчитує рядок до першого пробілу. cout в даному випадку виводить рядок повністю, навіть якщо нам вдасться засунути прогалини в рядок. Але є й інша незручність у використанні cin. Ця функція може зчитати скільки завгодно символів, а потім намагатись запхати в створений масив, проте потік даних просто не поміститься. Проблема в тому, що кількість елементів масиву задається константою або літералом, а зчитана кількість символів може в декілька разів перевищувати розмір масиву. Що б повністю позбутися від цих проблем, для зчитування рядка будемо користуватися функцією getline, яка наче розширює можливості функції cin. Записується це так: cin.getline(str, numOfChars). str – зчитування рядок, numOfChars – максимально можлива кількість символів, яка буде зчитана. Розглянемо програму нижче:

Cat
Amazing Cat
Cat
Amazing C
Для продовження натисніть будь-яку клавішу…

Як видно з прикладу, перший рядок має довжину в 4 символи і він повністю поміститься в масив з десяти елементів. Другий рядок має аж 12 символів, разом з символом закінчення рядка. Останні два символи a і t “відрізалися” і до рядка в 9 символів (Amazing C) так само приєднався десятий символ \0.

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

Робота з рядками вимагає підключення бібліотеки string. Нижче наведена таблиця функцій, які знадобляться нам в процесі написання програми.

Назва функції Опис
strlen(str) Визначає довжину рядка без нульового символу
strcpy(str1, str2) Копіює рядок str2 в рядок str1
strncpy(str1, str2, n) Копіює n символів з рядка str2 в рядок str1
strcat(str1, str2) Об’єднує рядок str2 і str1 в рядок str1
strncat(str1, str2, n) Об’єднує n символів з рядка str2 з рядком str1 і зберігає результат в рядку str1
strcmp(str1, str2) Порівнює рядки і повертає 0, якщо рядки однакові, < 0, якщо str1 > str2,> 0, якщо str1 < str2. Функція працює з урахуванням регістру. (Функція stricmp для порівнювання без урахування регістру)
strncmp(str1, str2) Порівнює n символів рядка str1 з рядком str2 і повертає 0, якщо рядки однакові, < 0, якщо str1 > str2, > 0, якщо str1 < str2. Функція працює з урахуванням регістру. (Функція strnicmp для порівнювання без урахування регістру)
strchr(str, ch) Виконує пошук символу ch в рядку str і повертає покажчик на перше входження даного символу в рядку. Якщо символ не знайдено, функція повертає нуль
strspn(str1, str2) Повертає довжину першої частини рядка str1, що містить символи, які є з рядку str2
strcspn(str1, str2) Повертає довжину першої частини рядка str1, що містить символи, яких немає в рядку str2
atof(str) Перетворює рядок str в число типу double (long float)
atoi(str) Перетворює рядок str в число типу int
atol(str) Перетворює рядок str в число типу long int

Функції для роботи з символами

Назва функції Опис
isalnum(ch) Повертає true, якщо ch є буквою або цифрою
isalpha(ch) Повертає true, якщо ch є буквою
islower(ch) Повертає true, якщо ch є буквою нижнього регістру
isupper(ch) Повертає true, якщо ch є буквою верхнього регістру
isdigit(ch) Повертає true, якщо ch є цифрою
isspace(ch) Повертає true, якщо ch є прогалиною
toupper(ch) Повертає символ ch у верхньому регістрі

Тип string

У C++ так само є тип для рядків – string. Він знаходиться в бібліотеці cstring і надає можливість більш зручної роботи з рядками. Об’єкти типу string можна зчитувати і виводити стандартними функціями введення і виведення. Так само як і зі звичайними рядками, нові рядки зчитуються до першого пропуску, або до кінця рядка. Цікаво те, що дані рядка можна конкатенувати за допомогою знака + (плюс).

Можливі питання за темою:

Питань ще нема

Додавайте свої питання в коментарі. Кращі потраплять до статті 🙂


Урок #6 Урок #8