You are on page 1of 13

Рядки та їх створення

Символ — найменша складова тексту

Символьна величина — це величина типу char для збереження


(цілочисельного) коду символу

Рядки — упорядковані послідовності символів, що використовують для


зберігання і представлення текстової інформації

Як один з варіантів, рядок у мові С++ подають масивом елементів типу char,
що закінчуються нуль-термінатором '\0'

Найпростіший варіант створювати і використовувати символьні масиви для


роботи з рядками, проте такий масив (типу char) не завжди можна вважати
рядком. Справа з тому, що рядок повинен містити нульовий байт /0, він
символізує кінець
Наприклад:

звичайний масив символів рядок


Звісно, звичайні правила при роботі з масивами дійсні, тому теоретично можна
ввести рядок приблизно так:
char str[6] = {'H', 'e', 'l', 'l', 'o', '/0'}
Але при роботі з рядками можна робити дещо простіше. Такий запис теж
працює:
char str[] = "Hello";
cout<<str<<endl;
По-перше, не потрібно вказувати розмір масиву (тільки при такому способі
ініціалізації). При виводі достатньо тільки імені масиву.
*Варто пам’ятати, коли вказуєте розмір, то він повинен перевищувати
кількість символів хоча б на 1 елемент.
Ще один нюанс:

символ рядок з одного символу.

Крім того можна користуватися вказівниками


char *str;
str = "Hello";
cout<<str<<endl;
Приклад:

На перший погляд все працює. Але!!! Якщо ввести для прикладу Hello World,
то результат буде тільки Hello…
Є проблема, якщо ввести два слово через пробіл то введення закінчиться після
пробілу, а результатом буде тільки перше слово.
*Оператор cout зчитує рядок до перших пробілу або ознаки кінця рядка.
Використаємо cin.getline().
Приймає:
- ім’я рядка
- кількість символів для введення
Давайте виправимо нашу програму.
Тепер Hello world повністю отримано.
*Інколи cin.getline() працює некоректно. Це відбувається, тому що зчитується
зайвий Enter. Таке можна спостерігати у приблизно такому коді.
cin>> x;
cin.get(); // без ф-ції cin.get(), cin.getline() може працювати некоректно
cin.getline(str);
Функції для роботи з рядками
бібліотека cstring

strlen(s) — повертає довжину рядка s без урахування нуль-символу;

strcpy(s,t) — копіювання символів з рядка t в рядок s;

strncpy(s,t,n) — копіювання n символів з рядка t в рядок s, повертає s;

strcat(s,t) — зберігає в s результат об'єднання рядків s і t;

strncat(s,t,n) — зберігає в s результат об'єднання рядка s і n символів


рядка t;

strcmp(s,t) — порівнює з урахуванням регістру рядки s і t, повертає ціле


значення типу int:

0, якщо рядки збігаються;


від'ємне, якщо s < t;
додатне, якщо s > t.

strncmp(s,t,n) — аналогічно strcmp порівнює n символів рядка s з


рядком t;

isalnum(c) — повертає ненульове ціле значення, якщо c — літера або


цифра, інакше — false;

isalpha(c) — повертає ненульове ціле значення, якщо c — літера, інакше


— false;

isdigit(c) — повертає ненульове ціле значення, якщо c — цифра, інакше


— false;

isblank(c) — повертає ненульове ціле значення, якщо c — пробіл, інакше


— false;

iscntrl(c) — повертає ненульове ціле значення, якщо c — символ


керування, інакше — false;

isgraph(c) — повертає ненульове ціле значення, якщо c — друкований


символ, інакше — false;

islower(c) — повертає ненульове ціле значення, якщо c — літера нижнього


регістру, інакше — false;
isprint(c) — повертає ненульове ціле значення, якщо c — друкований
символ, інакше — false;

ispunct(c) — повертає ненульове ціле значення, якщо c — знак пунктуації,


інакше — false;

isspace(c) — повертає ненульове ціле значення, якщо c — пробіл, інакше


— false;

isupper(c) — повертає ненульове ціле значення, якщо c — літера верхнього


регістру, інакше — false;

strchr(s,c) — пошук першого входження символу c у рядку s. У разі


вдалого пошуку повертає покажчик на місце першого входження
символу с
Наприклад: cout<<strchr(s,c); виводить рядок s, починаючи з цього
першого входження. Якщо символ не знайдено, то буде повернуто NULL;

strcspn(s,t) — повертає довжину початку s, що не містить символів t;

strspn(s,t) — повертає довжину початку s, що містить лише символи t;

strprbk(s,t) — повертає покажчик першого входження будь-якого символу


рядка t в рядок s
Наприклад: cout<<strpbrk(s,t); виводить рядок s, починаючи з цього
першого входження. Якщо символ не знайдено, то буде повернуто NULL;

toupper(c) — якщо символ c — маленька літера латиниці, то функція


відповідну велику літеру, інакше — символ без змін — див. код
бібліотека cstdlib

atof(s) — перетворює рядок s у тип double;

atoi(s) — перетворить рядок s у тип int;

atol(s) — перетворить рядок s у тип long;

бібліотека stdio.h

getchar() — повертає символ, зчитаний зі стандартного потоку введення;

putchar(с) — виводить символ с у стандартний потік виведення.

Клас string було запроваджено як альтернативу типу char * для роботи з


рядками.

Щоб скористатися наявними можливостями цього класу, потрібно підключити


бібліотеку string і простір назв std:

Для підключення цього класу до програми слід записати директиву:

#include <string> (без розширення .h)

і підключити простір імен бібліотеки шаблонів у вигляді

using namespace std;

Після цього можна оголошувати змінні типу string:

string strl, str2;.

Ініціювання рядків при оголошенні виконується одним із способів:

string st1 = “Рядок”;


string st2 (“Рядок”);.

Переваги типу string у порівнянні з типом char *

• можливість опрацювання рядків стандартними операторами C++ (=, +,


== тощо);
• забезпечення кращої надійності програмного коду. Наприклад, при
копіюванні рядків, коли рядок-джерело має більший розмір ніж рядок-
приймач;
• використання рядка як самостійного типу даних для забезпечення
несуперечливості даних.

Недолік типу string у порівнянні з типом char *— сповільнення швидкості


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

Надання значень змінним типу string можна здійснити:

• або використавши оператор =;


• або використавши функцію assign з класу string.

Функція assign має кілька реалізацій:

assign(s) — надання значення рядка s;

assign(s,j,n); — копіювання n символів з рядка s, починаючи з символа з


номером j;

assign(p,n); — копіювання перших n символів з рядка p типу char *.

Клас string дозволяє маніпулювати рядками, використовуючи стандартні


оператори:

= привласнення
+ конкатенація (об’єднання рядків)
+= привласнення з конкатенацією
== рівність
!= нерівність
< менше
<= менше або дорівнює
> більше
>= більше або дорівнює
[] індексація
Основні методи обробки STL-рядків

Наприклад: Функція insert()


Функція включення рядка в рядок:

str.insert(k,st) — вставляє в рядок str з позиції k рядок st;


str.insert(k1,st,k2,n) — вставляє в рядок str з позиції kl n символів рядка st,
починаючи з позиції k2 в рядку st.

You might also like