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. Ознайомтеся з довідковим розділом Функції для роботи з рядками.