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

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є літерою (до уваги беруться тільки великі та малі латинські літери), оголошено так:

Соседние файлы в папке ОП (лаби) [1-13]