- •Міністерство освіти і науки україни
- •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.2. Звертання до елементів символьних рядків
Процеси опрацювання символьних рядків базуються на двох основних властивостях рядків:
1) ім'я символьного рядка є константним вказівником на його перший символ;
2) кінець рядка задається нуль-символом ' \0'.
Для звертання до символів рядка застосовують як індексну, так і вказівникову систему доступу до елементів масиву
Приклад:
/*******************************************/
/* Видалення заданого символа. Варіант 1 */
/***************************+***************/
#include <conio.h>
#include <iostream>
using namespace std;
int main (void)
{
char st[] = "ABC *** XYZ *** KM*Q**RT*"; /* заданий рядок*/
char sym = '*' ;
int k, n;
cout << "Vkhidnyj rjadok: " << st << endl;
k = n = 0;
while (st[k] != '\0' )
if (st[k] == sym)
k++;
else
{
st[n] = st[k];
n++;
k++;
}
st[n] = '\0';
cout << "Rjadok bez symvola '" << sym <<"': ";
cout << st << endl;
getch();
return 0;
}
У наступному варіанті програми для звертання до елементів символьного рядка введено вказівники pkіpn. Перший вказує на символ, який перевіряється, а другий– на позицію рядка, куди повинен бути переписаний символ, що залишається в рядку. Замість циклуwhileу другому варіанті програми використано циклfor, а умову оператораifзмінено на протилежну.
/********************************************/
/* Видалення заданого символа. Варіант 2 */
/********************************************/
#include <conio.h>
#include <iostream>
using namespace std;
int main(void)
{
char st[] = "ABC *** XYZ *** KM*Q**RT*"; /* заданий рядок */
char sym = '*'; /* символ, що має бути вилучений */
char *pk, *pn; /* вказівники на символи рядка */
cout << "Vkhidnyj rjadok: " << st << endl;
for (pk = pn = st; *pk != '\0'; pk++) /* цикл по символах рядка */
if (*pk != sym)
*pn++ = *pk; /* копіювання всіх символів, крім заданого */
*pn = '\0'; /* фіксація кінця нового рядка */
cout << "Rjadok bez symvola '" << sym <<"': ";
cout << st << endl;
getch();
return 0;
}
У циклі forданої програми умовний оператор:
if (*pk != sym) *pn++ = *pk;
послідовно перевіряє кожен символ рядка st, звертаючись до елементів через вказівникpk. Якщо поточний символ не збігається з тим, який задано для вилучення(*pk != sym), то він переписується у позицію, на яку вказуєpn(*pn++ = *pk). Після цьогоpnпересувається на наступний символ рядка (pn++).
2.3. Бібліотечні функції для роботи з символами та символьними рядками
Стандартна бібліотека мови С/C++ включає набір різнотипних функцій, що забезпечують швидку реалізацію операцій, які найчастіше зустрічаються у процесах опрацювання символьних і текстових даних.
2.3.1. Функції класифікації та перетворення символів
У заголовному файлі <ctype. h>оголошено групу функцій, призначених для перевірки та класифікації окремих символів. Імена цих функцій починаються префіксомis:is...(). Усі функції мають один параметр з типомint– символ, що перевіряється. Функції перевірки повертають ціле ненульове значення (істина), якщо заданий символ належить до відповідної класифікаційної групи, і нульове значення (хибне), якщо символ не належить до цієї групи. Наприклад, функцію, яка перевіряє, чи заданий символsymє літерою (до уваги беруться тільки великі та малі латинські літери), оголошено так:
