- •§ 12. Строковые типы данных.
- •1. Множество значений строкового типа.
- •2. Описание типа – короткая строка.
- •3. Описание типа – длинная строка.
- •4. Обычные константы строкового типа.
- •5. Типизированные константы и переменные типа – короткая строка. Выделяемая память. Обращение к значениям составляющих. Реализация операции присваивания.
- •6. Типизированные константы и переменные типа – длинная строка. Выделение памяти и задание значений. Обращение к элементам строк.
- •7. Операции над данными строковых типов.
- •8. Некоторые стандартные процедуры и функции, используемые при обработке строк.
- •§ 13. Множественные типы данных.
- •1. Множественный тип. Его описание и множество значений. Простейшие выражения.
- •2. Переменные и константы множественного типа. Операции над данными множественного типа.
- •3. Процедуры include и exclude.
- •§ 14. Записи.
PROCEDURE TFORM1. BUTTON1CLICK (SENDER: TOBJECT);
TYPE
TW = FUNCTION (X: EXTENDED): EXTENDED;
VAR
N: BYTE;
X: ARRAY OF EXTENDED;
FUNCTION MAX (W: TW): EXTENDED;
VAR
I: BYTE; H: EXTENDED;
BEGIN
RESULT := W(X[1]);
FOR I:=2 TO N DO
BEGIN
H := W(X[I]);
IF H > RESULT THEN RESULT := H
END
END;
BEGIN
… // Задание значения переменнойN.
SETLENGTH (X, N+1);
… // Заданиезначений переменных X[1], … , X[N].
MEMO1. LINES. ADD (’MAX (F) = ’ + FLOATTOSTR (MAX (F)));
MEMO1. LINES. ADD (’MAX (G) = ’ + FLOATTOSTR (MAX (G)))
END;
END.
§ 12. Строковые типы данных.
1. Множество значений строкового типа.
Значениями того или иного строкового типа являются всевозможные последовательности символов, в каждой из которых число элементов – это какое-либо из целых чисел от 0 до M, где M – некоторая заданная величина. Значения строковых типов принято называть строками. Количество символов, составляющих строку, называют длиной строки.
В данном параграфе ограничимся рассмотрением следующих строковых типов
1) тип – короткая строка,
2) тип – длинная строка.
Для типа – короткая строка вышеупомянутую величину M принято называть максимальной длиной строки. Максимальная длина строки является характеристикой того или иного типа – короткая строка. Данная величина может быть одним из целых чисел от 1 до 255.
Для типа – длинная строка величина M – это число байтов в 2 Гб.
2. Описание типа – короткая строка.
тип – короткая строка
собственно
тип – короткая
строка
идентификатор
типа – короткая
строка
собственно тип – короткая строка
выражение над
обычными
константами целого
типа
Значение константного выражения, располагаемого в квадратных скобках – это максимальная длина строки определяемого типа. Собственно тип STRING(если действует директива{H-}) эквивалентен типуSTRING[255].
идентификатор типа – короткая строка
идентификатор
пользователя
3. Описание типа – длинная строка.
тип – длинная строка
собственно
тип – длинная
строка
идентификатор
типа – длинная
строка
собственно тип – длинная строка
Заметим, что из двух директив {$H+} и {$H-} по умолчанию действует директива{$H+}.
идентификатор типа – длинная строка
идентификатор
пользователя
4. Обычные константы строкового типа.
Рассмотрим способы, которые используются для изображения значений строковых типов.
Один из способов состоит в следующем: по порядку располагаются символы, составляющие строку, а слева и справа от этой последовательности добавляются апострофы.
Примеры:
’ABC’ , ’abc’ , ’ABC DEF’ , ’A’ , ’ ’ ,
’’ – строка не содержит ни одного элемента, эта строка называется пустой.
Другой способ изображения значения предполагает запись элементов строки в виде символьных констант с использованием знака # и указания порядкового номера символа.
Пример:
#65#66#67 ~ ’ABC’
Ещё один способ – комбинация первых двух.
Примеры:
’ABC’#23#36
#23#36’ABC’
’ABC’#23#36’DEF’
#23’ABC’#36#78
Значения строкового типа, записанные одним из вышеуказанных способов, представляют собой один из случаев обычных констант строкового типа, другой случай – это нетипизированные константы строкового типа.
Пример:
CONST
S = ’ABC’;
Обращение к значениям составляющих нетипизированной константы строкового типа осуществляется так же, как и обращение к значениям элементов одномерного массива. Нумерация составляющих константы при этом начинается с единицы. Для нетипизированной константы S (из предыдущего примера) S[1], S[2] и S[3] – это соотвественно обращения к первому, второму и третьему символам значения S.
5. Типизированные константы и переменные типа – короткая строка. Выделяемая память. Обращение к значениям составляющих. Реализация операции присваивания.
Наряду с обычными константами строкового типа в языке используются типизированные константы, а также переменные строкового типа.
Пусть S – это типизированная константа или переменная типа – короткая строка с максимальной длиной (строки)M{1, … , 255}, а L– длина значенияS. ДляS в оперативной памяти отводится участок длиной в M+1 байт.
0-й
байт
1-й
байт
2-й
байт
L-й
байт
L+1-й
байт
M-й
байт
Значение S.
S
…
…
Первый символ значения S располагается в первом байте, второй – во втором, и т.д., L-й – вL-ом. В нулевом байте хранится символ, порядковый номер которого равняется длине значения S, т.е. числуL.
Обращение к значениям элементов строки S осуществляется так же, как и обращение к значениям элементов одномерного массива. Обращение к значению первого элемента – это запись S[1], к значению второго элемента – запись S[2], к содержимому нулевого байта – запись S[0]. ORD(S[0]) совпадает с длиной значенияS. На месте номера в квадратных скобках может быть произвольное целочисленное выражение, значением которого является номер элемента.
Переменной (или типизированной константе) S может быть присвоено значение строкового типа. Если длина строки, которая присваивается, больше максимальной длины (строки), определённой для типа переменной (или типизированной константы) S, то при присваивании символы, которые не умещаются в рамках, определяемых максимальной длиной строки, отбрасываются. Длина строки – значения S устанавливается в результате выполнения присваивания.
Рассмотрим пример.
Пример 1.
PROCEDURE … ;
VAR
S: STRING[10];
BEGIN
S := ’ABCDEF’; // S = ’ABCDEF’
S := ’0123456789ABCD’ // S = ’0123456789’
END;