Pascal/Рядки
Рядки
[ред.]Найпримітивніша робота із рядками вже розбиралися раніше. Так, команда
writeln('Привіт, світе!');
виведе рядок 'Привіт, світе!' . Такі рядки також можна зберігати в змінних - типу string:
Program HelloWorld2;
var str:string;
begin
str:='Привіт, світе!';
writeln(str);
end.
Ця програма зберігає в змінній str значення, яке потім виводится командою writeln.
Щоб звернутися до окремого елементу рядка, треба скористатися квадратними дужками; цим рядки подібні до масивів. Програма
var str:string;
begin
str:='річка';
str[1]:='н';
writeln(str);
end.
виведе 'нічка' . В уважного читача в цьому місці виникне питання: масиви мають тип, відмінний від елементу масива; як же так виходить, що елемент рядка може бути рядком? Дійсно, не може. Елементи рядка мають свій, окремий тип - character (літерний тип). Справа в тому, що літерний тип може бути перетворений на рядок без втрати інформації, тому компілятор робить таке перетворення непомітно. Запис 'н' (в лапках тільки один знак!) означає літеру 'н' , а не рядок з однієї літери. Альтернативний спосіб задання символів - #число, де число - номер символу в кодуванні ASCII. Наприклад,
writeln(#64);
виведе літеру 'A' .
Особливості рядків
[ред.]Розглянемо команду
writeln(50);
і порівняємо її із командою
writeln('50');
Ці команди зовнішньо працюють однаково - виводять на екран знаки '50' . Різниця між ними в тому, що в першому випадку відбувається додаткове перетворення числа 50 на рядок '50' , а в другому рядок виводится безпосередньо, що працює трохи швидше. Втім, це не означає, що треба всюди, де можливо, перетворювати числа на рядки - треба тільки розуміти різницю, і вживати рядки і числа на своєму місці.
Комбінація ''
зветься пустим рядком; пустий рядок, вочевидь, не містить жодної літери (і сам не є літерою).
Довжину рядка можна дізнатися за допомогою функціїї length:
Program StringLength;
var str:string;
begin
write('Введіть рядок: ');
readln(str);
writeln('Довжина рядка: ',length(str));
end.
В старих версіях мови Паскаль поточна довжина рядка зберігалась в нульовій комірці рядка (на кшталт str[0]); іноді можна побачити в програмах, як працюють безпосередньо із цим значенням. В сучасних версіях це не так, тому треба користуватися тільки функцією length.
Рядки порівнюються за алфавітом; при цьому великі літери завжди вважаються такими, що йдуть раніше за маленькі (у відповідності до таблиці ASCII). Тобто
if 'bb'<'aa' then writeln('''bb''<''aa''')
else writeln('''bb''>=''aa''');
if 'BB'<'aa' then writeln('''BB''<''aa''')
else writeln('''BB''>=''aa''');
виведе 'bb'>='aa' 'BB'<'aa' ! Коротший рядок вважається таким, що йде раніше за довший (якщо, звісно, всі літери коротшого збігаються з початковими літерами довшого рядка).
Індексація рядків
[ред.]В типі String довжина рядка записується на початку рядка перед самим рядком, тому індекс завжди починається з 1. Перший символ S[1].
Завдання
[ред.]1. Ознайомтеся з довідковим розділом Функції для роботи з рядками.