Рядковий тип даних

Розв’язуючи задачі нам доводиться виконувати не тільки математичні обчислення, а й опрацьовувати текстову інформацію: знаходити потрібне слово, виконувати електронний переклад, шифрувати або розшифровувати текст і т.д. Для роботи з текстами в Паскалі застосовується структурований тип даних String (рядок). Рядкомназивається послідовність певної довжини, що складається з символів.

Опис типу:

Var Str:string;

Найбільша довжина рядка не перевищує 255 символів і може бути вказана в його описі. Наприклад, рядкові змінні з найбільшою довжиною 10 символів описують так:

Var S,T:string[10];

Якщо найбільша довжина в описові не вказана, то вона становить 255 символів. Справжня довжина рядка залежить від присвоєного значення і не перевищує вказаної в описі. Для описаних вище змінних можливі такі присвоєння:

Str:='мир'; {справжня довжина 3 символи}

S:='я і ти';{справжня довжина 6 символів}

T:='';{справжня довжина 0 символів}

Як бачите, рядкові значення в програмі обмежуються апострофами. Якщо ж рядок теж містить апростроф, то в тексті програми цей символ слід подвоїти:

S:='Сім''я'; {присвоєне значення «Сім'я»}

Змінні типу String виводяться на екран з допомогою стандартних процедур Write і Writeln і вводяться за допомогою стандартних процедур Readln і Read. Тобто вводяться і виводяться не поелементно, як символи, а повністю.

Операції з рядками

У Паскалі є два основних способи опрацювання змінних типу String. Перший спосіб передбачає опрацювання всього рядка як єдиного цілого, тобто єдиного об’єкта. Також, можна розглядати рядок як складний об’єкт, що складається з окремих символів, тобто елементів типу Char, що під час опрацювання доступні кожний окремо. До кожного символу можна звернутися за його номером: Str[i] – це звернення до і-го символу рядка Str. Нумерація символів починається з 1.

1. Склеювання.

Під склеюванням розуміється послідовне об’єднання кількох рядків в один.

Приклад

Var Str1, Str2, Str3:string;

begin

Str1:='Я люблю';

Str2:='інформатику.';

Str3:=Str1+ ' ' +Str2;

...

Рядок Str3 набуває значення «Я люблю інформатику.».

2. Порівняння.

Паскаль дає змогу виконувати операції порівняння двох рядків. Порівняння відбувається посимвольно зліва направо: порівнюються коди відповідних символів, доки не порушиться рівність або не закінчиться один з рядків (чи обидва разом). При цьому відразу робиться висновок про знак нерівності. Два рядки називаються рівними, якщо вони рівні за довжиною і збігаються посимвольно.

Приклад

'Balkon'<'balkon' (Ord('B')<Ord('b'));

'Кіт'='Кіт' (рівні за довжиною і збігаються посимвольно).

Стандартні процедури і функції

АЛГО надає у розпорядження цілу низку стандартних функцій і процедур мови Паскаль, призначених для опрацювання рядків. Розглянемо найважливіші з них. Назви функцій подані двома мовами.

1. Вилучення.

Для вилучення з рядка фрагмента використовується процедура ВилучитиDelete(Str,n,m), що вирізає з рядка Str m символів, починаючи з n–го. Таким чином, після виклику процедури Delete рядок змінюється.

Приклад

Str1:=’ABCDEFGH’;

Delete (Str1,3,4);

Після виконання цих операторів із рядка будуть вилучені чотири символи (починаючи з третього), тобто рядок стане таким: Str1=‘ABGH’.

2. Вставка.

Для вставки одного рядка в інший використовується процедура Вставити Insert (Str1,Str2,n), що вставляє рядок Str1 у рядок Str2, починаючи з n–го символу. При цьому перший рядок не змінюється , а другий одержує нове значення.

Приклад

Str1:='ABCDEFGH';

Str2:='abcdefgh';

Insert(Str1, Str2, 3);

У результаті виконання даної процедури рядок стане таким: Str2= ‘abABCDEFGHcdefgh’. Таким самим буде результат виконання такої послідовності операторів:

Str2:='abcdefgh';

Insert ('ABCDEFGH',Str2,3);

3. Копіювання.

Функція Фрагмент Copy (Str,n,m) копіює m символів рядка str, починаючи з n-ого символу. При цьому рядок Str не змінюється.

Приклад

Str1:='ABCDEFGH';

Str2:='abcdefgh';

Str3:=Copy(Str1,4,3);

Writeln(Str3);

Writeln(copy(Str2,4,3));

Значення змінної Str3=’DEF’. А на екран будуть виведені такі рядки:

DEF

def

4. Довжина рядка.

Під довжиною рядка розуміють фактичну (а не найбільшу можливу) кількість символів у рядку. Її значення можна отримати за допомогою функції Довжина Length (Str). Результат її виклику – ціле число, що дорівнює кількості символів рядка Str.

Приклад

Str:='Я люблю інформатику.';

K:=Length(Str);

У результаті значення змінної K буде дорівнювати 20.

5. Пошук підрядка.

Функція Знайти Pos (Str1,Str2) визначає позицію підрядка в рядку. Її результат – ціле число. Воно визначає номер елемента, з якого починається перше входження підрядка Str1 у рядок Str2. Якщо Str1 не входить у Str2, то значення функції дорівнює 0.

Приклад

K:=Рos('ка', 'солодка карамелька')

У цьому випадку значення К дорівнює 6, тому що функція Рos повертає номер елемента, починаючи з якого підрядок зустрічається перший раз.

6. Числа і рядки.

Для роботи з числами й рядками застосовують дві процедури перетворення типів.

Текст Str(N,Str1) – переводить числове значення N у рядкове і присвоює результат рядку Str1, причому можна переводити як цілі числа, так і дійсні.

Приклад

Str(1234, Str1) – після виконання Str1='1234';

Str(452.567, Str1) – переводимо дійсне число, результат Str1='452.567';

Друга процедура виконує обернену дію.

Значення Val (Str, N, K) – переводить рядкове значення у числове. Якщо даний рядок є записом числа (цілого або дійсного), то значення К стане рівне 0, а N – шуканому числу. Якщо ж повністю перетворити рядок в число не вдалось, то K буде рівним номеру помилкового символу в рядку, а N – числу, записаному символами перед помилковим.

Наведемо програму, яка демонстує різні варіанти виклику процедури Значення:

Program ValDemo;

Var x, k:integer;

y:real;