Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
23.03.2015
Размер:
53.25 Кб
Скачать

2

C++ Лекция 8

ОПЕРАЦІЇ З РЯДКАМИ

МАСИВИ СИМВОЛІВ в C++

У стандарт C++ включена підтримка декількох наборів символів. Традиційний 8 бітовий набір символів називається "вузькими" символами. Крім того, включена підтримка 16 бітових символів, які називаються "широкими". Для кожного із цих наборів символів у бібліотеці є своя сукупність функцій.

Як і в С , для символьних рядків в C++ не існує спеціального строкового типу. Замість цього рядка в C++ представляються як масиви елементів типу char, що закінчуються термінатором рядка символом з нульовим значенням ('\0'). Рядки, що закінчуються нуль-термінатором, часто називають ASCII Рядками. Символьні рядки складаються з набору символьних констант, взятих в подвійні лапки:

"Це рядок символів..."

У таблиці наведений набір констант, що застосовуються в C++ у якості символів.

прописна буква

від 'А' до 'Z', від 'А' до 'Я'

мала літера

від 'а' до 'z', від 'а' до 'я'

цифра

від '0' до '9'

порожнє місце

горизонтальна табуляція '\9', переклад рядка (код ASCII 10), вертикальна табуляція (код ASCII 11), переклад форми (код ASCII 12), повернення каретки (код ASCII 13)

символи пунктуації

! ” # $ % & ’ () * +, – . / : ; < = > ? @ [ \ ] _ { | } ~

керуючий символ

усі символи з кодами від 0 до 1F і символ з кодам 7F

пробіл

символ пробілу (код ASCII 32)

шістнадцятирічна цифра

від '0' до '9', від 'А' до 'F', від 'a' до 'f'

При оголошенні строкового масиву необхідно брати до уваги наявність термінатора наприкінці рядка, відводячи тим самим під рядок на один байт більше:

char buffer [10] ;// оголошення рядка розміром 10 символів, включаючи термінатор.

// Реальний розмір рядка: 9 символів + термінатор.

Строковий масив може при оголошенні ініціалізуватись початковим значенням. При цьому компілятор автоматично обчислює розмір майбутнього рядка й додає в кінець нуль-термінатор:

char Wednesday [ ] = "Середовище"; // оголошення й ініціалізація рядка

char Wednesday [ ] = { 'С', 'р', 'е', 'д', 'а', '\0' } ; // що рівносильне

У якості оператора введення при роботі з рядками замість оператора запису в потік >> краще використовувати функцію getline, тому що потоковий оператор уведення ігнорує проміжки, що вводяться, а крім того, може продовжити введення елементів за межами масиву, якщо під рядок приділяється менше місця, чим уводиться символів. Синтаксис функції getline має вигляд:

istream& getline ( char* pch, int ncount, char delim = '\n' ) ;

Функція getline приймає два обов'язкові параметри: перший аргумент pch вказує на рядок, у який здійснюється введення, а другий параметр ncount – число символів, що підлягають уведенню. Третій необов'язковий параметр delim – символ, який буде перетворений у нуль-термінатор. За замовчуванням це символ кінця рядка '\n'.

Розглянемо приклад оголошення символьних рядків і використання функції введення getline.

char S [6] ;// оголошення й ініціалізація рядка довжиною в 5 символів

cout<<"Input string: " ;// вивід на екран запрошення

cin.getline ( S, 6, ’.’ ) ;// увед рядка довж.,=5символів, увед рядка завер крапкою

cout<<"You input string: "<<S<<'\n' ; // вивід рядка

Оголошений на початку програми рядок S може прийняти тільки п'ять значущих символів й буде завершений нуль-термінатором. Усі наступні символи, що вводяться в цей строковий масив, будуть відкинуті. Як видно із прикладу, при використанні функції getline другим параметром слід указувати число, менше або рівне розміру символьного рядка, що вводиться.

Перелік функцій дивись у файлі Додаток до лекції №8.