C++ первый курс Alex Жив / C++ Перший курс / old / Lections 1 trim / Лекція №8 Рядки
.doc
ОПЕРАЦІЇ З РЯДКАМИ
МАСИВИ СИМВОЛІВ в 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.