- •Міністерство освіти і науки україни
- •2.1 Оголошення та ініціалізація символьних рядків
- •2.2. Звертання до елементів символьних рядків
- •2.3. Бібліотечні функції для роботи з символами та символьними рядками
- •2.3.1. Функції класифікації та перетворення символів
- •Int isalpha (int sym);
- •2.4. Функції операцій над символьними рядками
- •2.5. Функції перетворення рядків символів у числа та зворотних перетворень
- •2.6. Масиви символьних рядків і масиви вказівників
- •2.6.1. Масиви символьних рядків
- •2.6.2. Масиви вказівників на символи рядків
- •2.7 Ввід та вивід символів та символьних рядків.
- •2.7.1 Ввід символів та символьних рядків.
- •2.7.2 Вивід символів та символьних рядків.
- •3. Контрольні запитання
- •4. Лабораторне завдання
- •5. Список літератури
- •Індивідуальні завдання
2.7 Ввід та вивід символів та символьних рядків.
2.7.1 Ввід символів та символьних рядків.
Ввід символів в мові С++ здійснюється за допомогою об’єкта стандартного потоку введення cin та операції взяти з потоку >>:
char sym;
cin >> sym;
Таким чином, після виконання попередньої команди у змінну sym буде записано лише один (перший введений) символ, незалежно від того, скільки символів було введено.
Для вводу символьного рядка існує декілька способів. Оскільки символьний рядок трактується як масив, то його можна вводити в циклі поелементно. Такий спосіб на практиці рідко використовується. Інший спосіб полягає у використанні стандартного потоку cin. Наступний приклад демонструє це:
char sym[10];
cin >> sym;
Таким чином можна ввести тільки 9 символів. Якщо буде здійснено ввід більшої кількості, то в залежності від компілятора, будуть виникати помилки на етапі виконання програми. Даний спосіб має один недолік, який полягає в тому, що з стандартного потоку введення зчитуються символи до тих пір, поки не зустрінеться пробіл, символ табуляції, символ нового рядка або символ кінця файлу EOF. У багатьох випадках виникає необхідність ввести в символьний рядок повний текст. Для цього в С++ передбачена функція cin.getline, яка реалізована як метод об’єкту cin. Ця функція має три аргумента – масив символів, у якому буде зберігатися рядок тексту, максимальна довжина цього рядку та символ-ознака кінця рядка. Наприклад, такий код
char text[80];
cin.getline(text,80,'\n');
оголошує масив символів text довжиною 80 символів і зчитує рядок символів з клавіатури в цей масив. Дана функція припиняє зчитування символів у таких випадках: якщо зустрінеться символ-обмежувач '\n', якщо введено символ-ознака кінець файлу EOF (наприклад за допомогою комбінації клавіш CTRL+Z) або кількість зчитаних символів стала рівна 79 (тобто на одиницю менше за значення другого аргумента, оскільки останній символ резервується для нуль-символа. Сам символ-обмежувач (в нашому випадку '\n') зчитується і відкидається (в масив не заноситься). Третій аргумент функції getline() має символ нового рядка '\n' в ролі значення за замовчуванням, так що попередній виклик функціх може бути записаний у такому вигляді
cin.getline(text,80);
2.7.2 Вивід символів та символьних рядків.
Вивід символів та символьних рядків виконує стандартний оператор виведення на основі об’єкту cout. В даному випадку не має обмежень щодо довжини рядка. Слід пам'ятати, що вивід рядка здійснюється до зустрічі першого нуль-символа(‘\0’). Якщо ж він буде відсутній, то вивід буде здійснюватися до тих пір, поки не знайдеться такий символ, або не вичерпається об'єм буфера виводу, і виникне помилка нестачі пам’яті.
Приклад:
char s = 'A';
char s1[] = "ABCDEFG";
char s2[] = {'Z', 'Y', 'X', '\0'};
cout << s << "\n\r";
cout << s1 << "\n\r";
cout << s2 << "\n\r";
3. Контрольні запитання
Як у мові С++ організована робота з рядками символів?
Які способи ініціалізації символьних рядків Ви знаєте?
Які є особливості роботи з символьними рядками в С++?
Яку роль відіграє ім’я масиву символів? Чи можна його використати для адресації довільного символа рядка через вказівник?
Що є ознакою кінця символьного рядка? Напишіть оператор циклу для перебору всіх символів заданого рядка через вказівник типу char.
Які основні функції класифікації та перетворення символів Ви знаєте?
За допомогою якої стандартної бібліотечної функції можна виконати порівняння двох рядків? Наведіть приклад.
Як перетворити числове значення в рядок символів?
Яка різниця між масивом символьних рядків та масивом вказівників на символи рядків?
Як здійснюється введення символів та рядків у С++?
Як скопіювати один рядок в інший? Чому не можна просто присвоїти один масив символів іншому?
Як перевірити чи входить заданий символ у заданий рядок? Напишіть фрагмент коду, який обчислює кількість входжень символа ‘E’ у рядок символів text.
