§ 33. Величини рядкового типу
Рядок — це послідовність символів. Для зберігання рядків призначений рядковий тип даних (String), який широко використовується в мові Object Pascal для опрацювання текстових даних.
Рядкові константи у тексті програми беруть в одинарні лапки. Опис рядкової змінної має вигляд:
var S: String;
Кількість символів у рядку може досягати 28 - 1 = 255 символів.
Довжину рядкової величини можна обмежити, якщо в її описі вказати максимально допустиму кількість символів:
var S: String[10j;
Звернутися до окремого символу рядкової змінної можна за його номером у рядку: S[i] — ї-й символ рядка S.
Перетворити текст «to learn» на текст «to reach», виконуючи операції над символами заданого рядка. var х: String; begin X := 'to learn';
X[4] := X[7]; X[7] := 'c'; X[8] := 'h'; end;
Конкатенацією двох або більше рядків називають їх злиття в один рядок. Цю операцію позначають символом '+'.
Операція конкатенації дозволяє об’єднувати в один рядок змінні й константи рядкового типу (String) і символьного типу (Char).
Виконати конкатенацію рядків. var X: String; begin
X := 'a' + 'Ab' + 'Bc'; // отримуємо X = 'aAbBc';
end;
Стандартні функції для обробки рядків
Для роботи з величинами рядкового типу у мові Object Pascal існують стандартні процедури і функції. Розглянемо деякі з них.
1) Функція Length(S: String) повертає довжину рядка (кількість символів).
var S: String; L: Integer; begin
S := 'Hello!';
L := Length(S); // L = 6
end;
2) Функція Pos(SubS, S: String) повертає позицію першого входження підрядка SubS в рядок S. Нумерація символів починається з одиниці. У разі відсутності підрядка в рядку функція повертає 0.
var S, SubS: String; P: Integer; begin
S := 'Hi! How do you do?';
SubS := 'do';
P := Pos(SubS, S); // P = 9
end;
3) Функція Copy(S: String; n, Length: Integer) повертає підрядок рядка S завдовжки Length, починаючи з n-го символу.
var S1, S2: String; begin
51 := 'This is a test for Copy(OK) function.';
52 := Copy(S1, 11, 4); // S2 = 'test' end;
4) Процедура Delete(S: String; i, n: Integer) вилучає n символів із рядка S, починаючи з ї-го символу. var S: String; begin
S := 'Hello, world!';
Delete(S, 6, 7); // S = 'Hello!'
end;
5) Процедура Insert(SubS: String; S: String; Pos: Integer) вставляє в рядок S підрядок SubS у позицію Pos.
var S: String; begin
S := 'Hello, world!';
Insert(' my', S, 8); // S = 'Hello, my world!'
end;
6) Функція StringReplace(S, OldS, NewS, [rfReplaceAll, rfIgnoreCase]) замінює в рядку S підрядок OldS на рядок NewS. У квадратних дужках задаються параметри заміни:
rfReplaceAll: заміняти всі входження підрядка OldS у рядку S; rfIgnoreCase: нехтувати регістром під час пошуку підрядка OldS у рядку S.
var before, after: String; begin // Заміна всіх входжень A на THE before := 'This is a way to live A big life';
after := StringReplace(before, 'a', 'THE', [rfReplaceAll, rfIgnoreCase]);
{ after= 'This is THE wTHEy to live THE big life } end;
7) Функція ReverseString(S: String) розташовує символи рядка S у зворотному порядку. Для застосування цієї функції необхідно підключити до програми модуль StrUtils. uses StrUtils; var SI, S2: String; begin
51 := '1234abcd';
52 := ReverseString(SI); // S2 = 'dcba4321' end;
Порівняння рядків
Рядки можна порівнювати один з одним, використовуючи лексикографічний порядок (подібний до порядку слів у словнику). Рядки порівнюються посимвольно згідно з їхніми кодами в таблиці кодів. var SI, S2, S3: String; BI, B2: Boolean; begin
SI := '123'; S2 := '456';
BI := (SI = S2); // BI = False B2 := (SI < S2); // B2 = True SI := 'abcd'; S2 := 'bcd';
BI := (SI < S2); // BI = True end;
Питання для самоперевірки
1. Що таке довжина рядка? Як її визначити?
2. Як можна виконати злиття рядків?
3. Яка функція повертає позицію першого входження підрядка у рядок?
4. Яке значення повертає функція Pos(SubS, S), якщо підрядок SubS у рядку S відсутній?
5. Як можна отримати підрядок заданого рядка?
6. Як можна вилучити підрядок із заданого рядка?
Вправа 33
Скласти програму, що виконує задану заміну символів у рядку.
1) Створіть новий проект. Змініть заголовок форми на «Пошук і заміна». Розмістіть на формі кнопку Buttonl і змініть заголовок створеної кнопки на «Замінити».
2) Розмістіть на формі чотири компоненти Label згідно з рисунком. Для елемента Label4 задайте такі значення властивостей: AutoSize: False; Wordwrap: True.
3) Розмістіть на формі три компоненти Edit згідно з рисунком.
4) Створіть процедуру обробки події onclick для кнопки Замінити. У програмному коді створеної процедури запишіть оператори: var S, SI, S2, S3: String; begin
S := Editl .Text;
SI := Edit2.Text; S2 := Edit3.Text;
S3 := StringReplace(S, SI, S2, [rfReplaceAll, rfIgnoreCase]); Label4.Caption := S3; end;
5) Запустіть проект на виконання. Перевірте роботу програми для S = 'Why do You cry, Willy, why do You cry?';
SI = 'cry'; S2 = 'smile'. Збережіть проект у папці Вправа 33.
6) Змініть програмний код так, щоб у реченні, вказаному в п. 5, літери «W» і «w» були замінені символом «*».
Комп’ютерне тестування
Виконайте тестове завдання 33 з автоматичною перевіркою на сайті interactive.ranok.com.ua.
Це матеріал з підручника Інформатика 8 клас Бондаренко
Автор: admin от 7-10-2016, 22:40, Переглядів: 3783