
5 Розв’язання задач з використанням рядкових літералів
5.1 Мета роботи
Вивчити і освоїти засоби складання програм з використанням рядкових літералів.
5.2 Підготовка до роботи
Вивчити правила організації. Необхідно знати основні особливості подання рядкових літералів в мові С++.
Рядкові літерали. На відміну від багатьох мов високого рівня в мові ''С++'' формально відсутній спеціальний рядковий тип. Замість його в ''С'' введений ''рядковий літерал''– вектор з елементами типу char, який являє собою нуль або більше символів, що мають з обох сторін подвійні лапки. У пам'яті ЕОМ цей вектор, окрім самих елементів, має завершальний символ – «'\0' – нуль-термінатор».
Очевидно, що вектор символів нічим не відрізняється від розглянутих раніше звичайних векторів. А саме: якщо рядковий літерал використовується для ініціалізації вектора, то адреса першого елемента є синонімом ідентифікатора вектора. Ініціалізація вектора з елементами char має такий вигляд :
char S8 [] =''Строка'’;//SS [0] ='c’,
//SS [1] ='t’, SS [2] ='p’, SS [3] ='o’, SS [4] ='k’, SS [5] ='a’, SS [6] =’\0’
Під час роботи з рядковими літералами доцільніше використання механізму покажчиків, тобто типу char*. Наприклад:
char *S;
S=''Строка'’;//S [0] ='c’, S [1] ='t’, S [2] ='p’, S [3] ='o’, S [4] ='k’,
//S [5] ='a’, S [6] =’\0’
Або
char*S;
S=''Строка'’
У цьому випадку змінна – покажчик S одержує початкове значення, що дорівнює адресі першого елемента рядкового літерала (символу ‘с’), розташованого в сегменті даних, де нуль–термінатор є частиною списку ініціалізаторів.
Слід звернути увагу на неприпустимість використання ідентифікатора вектора типу char в операторах привласнення з рядковими літералами.
Наприклад:
char SS [6];
SS=''cтрока’;//неприпустимо
Привласнення неприпустиме, як вже відзначалося, в зв'язку з тим, що ідентифікатором вектора є покажчик–константа. Це ще раз підкреслює привабливість використання механізму покажчиків під час роботи з рядками.
С++ містить велику кількість функцій для роботи з рядковими літералами.
Використання механізму покажчиків під час роботи з рядковими літералами зручно розглянути на прикладі деяких функцій, наведених в Додатку А.
//функція на виході видає кількість символів рядкового літерала
size_t strlen (const char*S)
{for (int i=0; S [i]; ++i);
return i;}
//функція вертає покажчик на рядковий літерал S1 де копіюється рядок S2
char strcpy (char*S1, const char*S2)
{
for (int i=0; S1 [i] =S2 [i]; ++i);
return (S1);
}
5.3 Варіанти завдань до лабораторної роботи 5
1. Визначити, скільки разів у сформованому вами рядку зустрічається сполучення символів «а» і «у».
2. Визначити, скільки разів у сформованому вами рядку повторюються обрані символи, із яких складається алфавіт.
3. Визначити, скільки разів у сформованому вами рядку зустрічається кожний із символів, і яке з заданих сполучень цих символів найчастіше зустрічається.
4. Визначити, скільки однотипних сполучень (сполучення задаються інтерактивно) міститься в переліку прізвищ студентів вашої групи.
5. Скласти програму визначення слів, що містять цифрові символи.
6. Розробити програму кодування і декодування тексту. Алфавіт містить 20 символів.
7. У довільно взятому реченні зробити заміну слів, розташованих на парних і непарних позиціях.
8. У довільно сформованому рядку, що містить 60 латинських букв, потрібно всі входження lat замінити на tal.
9. У довільно сформованому рядку, видалити перше входження ПЕКЛО, якщо таке є. Вільне місце, що утвориться, заповнити останніми символами, а в кінець додати пробіли.
10. У довільно сформованому рядку замінити на РОВ перше входження С, якщо таке є.
11. Виділити частину рядка (перше входження), розташовану між двома буквами. Букви задаються в діалозі.
12. У довільно взятому реченні надрукувати слова, в яких збігається більше двох літер.
13. У довільно взятому реченні визначити слово, що містить максимальну кількість голосних букв.
14. У довільно взятому реченні надрукувати слова в зворотньому порядку.
15. У довільно взятому реченні надрукувати слова за абеткою.
16. Визначити кількість слів у заданому реченні, а також кількість букв.
17. У довільно взятому реченні видалити всі зайві пробіли.
18. Вивести на печатку першу й останню букви кожного слова.
19. У довільно взятому реченні визначити кількість слів, в яких утримуються цифрові символи.
20. У довільно взятому реченні визначити кількість слів, які закінчуються на м'який знак.
21. У довільно взятому реченні замінити слово « республіка » на « держава ».
22. У довільно взятому реченні визначити слово, що складається з макси-мальної кількості символів.
23. У довільно взятому реченні виділити слова, взяті в лапки.
24. У довільно взятому реченні виділити однакові слова.
25. У довільно взятому реченні зробити взаємозамінювання символів, які займають парні і непарні позиції.
26. Скласти програму кодування речень. Кодування речень виконати таким чином, щоб код кожної букви слова залежав від коду першої букви. Наприклад, різниці кодів.
27. У довільно взятому реченні визначити кількість букв у кожнім слові. Надрукувати слово, що містить максимальну кількість букв.
28. У довільно взятому реченні виділити слова, що містять заданий у діалозі символ.