Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

2. Рядковий тип

Для збереження рядків (тобто послідовностей із символів) у Турбо-Паскалі мається тип string. Значеннями рядкових змінних можуть бути послідовності різної довжини (від нуля і більше, довжині 0 відповідає порожній рядок). Оголосити рядкову змінну можна двома способами: або var s: string; (максимальна довжина рядка — 255 символів), або var s: string[n]; (максимальна довжина — n символів, n — константа чи конкретне число).

Для того щоб записати значення в рядкову змінну використовуються ті ж прийоми, що і при роботі із символами. У випадку присвоювання конкретного рядка, це рядок повинний записуватися в апострофах (s:='Hello, world!'). Приведемо найпростіший приклад з рядками: програма запитує ім'я в користувача, а потім вітає його:

program Hello;

var s: string;

begin

write('Як Вас кличуть: ');

readln(s);

write('Привіт, ',s,'!');

readln;

end.

Збереження рядків. У пам'яті комп'ютера рядок зберігається у виді послідовності із символьних змінних, у них немає індивідуальних імен, але є номера, що починаються з 1). Перед першим символом рядка мається ще і нульовий, у якому зберігається символ з кодом, рівним довжині рядка. Нам абсолютно байдуже, які символи зберігаються в байтах, що знаходяться за межами кінця рядка. Розглянемо приклад. Нехай рядок s оголошений як string[9], тоді після присвоювання s:=’Привіт’; вона буде зберігається в наступному виді:

Номер байта

0

1

2

3

4

5

6

7

8

9

Уміст

#6

‘П’

‘р'

‘и'

‘в'

‘е'

‘т'

‘ю'

‘s’

‘%’

Для того щоб у програмі одержати доступ до n-го символу рядка використовується запис s[n]. Якщо поміняти значення s[0] то це відіб'ється на довжині рядка. У наступному прикладі з рядка 'Привіт' ми зробимо 'Привіт!': s[0]:=#7; s[7]:='!';.

Порівняння рядків. Рядки порівнюються послідовно, по символах. Порівнюються перші символи рядків, якщо вони рівні — то другі, і т.д. Якщо на якомусь етапі з'явилося розходження в символах, то меншим буде той рядок, у якого менший символ. Якщо рядки не розрізнялися, а потім один з них закінчився, то він і вважається меншим. Приклади: 'ананас'<'кокос', 'свиня'>'свинина', ''<'A', 'hell'<'hello'.

Склеювання (конкатенація) рядків. До рядків можна застосовувати операцію «+», при цьому результатом буде рядок, що складається з послідовно записаних «складових». Приклад: після дії s:= 'abc'+'def'+'ghi'; перемінна s буде містити ‘abcdefghi’.

Процедури і функції для роботи з рядками. Найбільше часто уживається функція length(s: string): integer (після двокрапки записаний тип значення, що повертається функцією, у нашому випадку — ціле число). Ця функція повертає довжину рядка s.

Інші процедури і функції приведені в таблиці:

Чи процедура функція

Призначення

Приклад

функція

Copy(s: string; start: integer; len: integer): string

Повертає вирізку зі строкової змінної s, починаючи із символу з номером start, довжина якої len

s:=’Безглуздий’;

s1:=Copy(s,4,4);

s1 стане ‘користь’}

функція

Pos(s1: string; s: string): byte

Шукає підрядок s1 у рядку s. Якщо знаходить, то повертає номер символу, з якого починається перше входження s1 у s; якщо s1 не входить у s, то функція повертає 0

n:=pos(‘міністр’,

‘адміністратор’); {=3}

n:=pos(‘abc’, ‘stuvwxyz’);{=0}

процедура

Insert(s1: string; s: string; start: integer)

Вставляє рядок s1 у рядкову змінну s починаючи із символу з номером start.

S:=‘кот’;

insert(‘мпо’,s,3);

s стане ‘компот’}

процедура

Delete(s: string; start: integer; len: integer)

Видаляє зі рядкової змінної s фрагмент, що починається із символу з номером start і довжиною len

s:= ‘трикутник’;

delete(s,4,6);

s залишиться ‘три’}