Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль (ст 33).doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
821.76 Кб
Скачать

Строковый тип данных – String

1. Строка - это последовательность символов кодовой таблицы персонального компьютера. Количество символов в строке (длина строки) может динамически изменяться от 0 до 255. В Pascal строка трактуется как последовательность символов. Для строки из N символов отводится N+1 байт памяти: N байт – для хранения символов строки и один байт – для значения текущей длины строки. К любому символу в строке можно обратиться, указав его номер. В самом начале строки (под нулевым номером) расположен байт, содержащий значение текущей длины строки. Поэтому для определения объема памяти в байтах, требуемой для размещения строки, к значению ее максимальной длины прибавляется 1.

Рассмотрим структуру размещения строки в памяти на примере. Пусть М – максимальная длина строки, L – текущая длина, А – номер ячейки памяти, с которой начинается размещение строки, тогда:

А – содержит величину текущей длины (нулевой байт);

А+1 – содержит первый символ строки (1-ый байт);

А+L – содержит последний значащий символ (L-ый байт);

A+L+1

… – незанятые ячейки памяти, отведенные под строку.

A+M

2. Для определения строкового типа данных используется зарезервированное слово String, за которым следует заключенное в квадратные скобки значение максимально допустимой длины строки данного типа. Если это значение не указывается, то по умолчанию длина строки равна 255 байт. Переменную строкового типа в программе можно объявить двумя способами:

а) через раздел описания типов

Type <имя_типа_ строки> = String [<макс_длина_строки>];

Var <имя_переменной> :< имя_типа_строки>;

б) в разделе описания переменных.

Var <имя_строки>: String[<макс_длина_строки>];

Пример. Type Stroka= String [15];

Var B : Stroka;

Пример. Var B : String[15];

Определение строкового типа устанавливает максимальное количество символов, которое может содержать строка.

Строковые данные могут использоваться в программе также в качестве констант.

Пример.

Const

Address=’Березовая аллея, 25’;

При использовании в выражениях строка заключается в апострофы. Недопустимо применение строковых переменных в качестве селектора в операторе Case.

3. Для присваивания строковой переменной результата строкового выражения используется оператор присваивания.

Пример.

Var Str1, Fio : String[20];

Str1:=’Группа учащихся’;

Fio:=’Бочаров А. А.’;

Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, все лишние символы справа отбрасываются.

Пример.

Описание А

Выражение

Значение А

A : String[6]

A : String[8]

A : String[2]

А:=ГРУППА 1’;

А:=ГРУППА 1’;

А:=ГРУППА 1’;

ГРУППА

ГРУППА 1

ГР

Допускается смешение в одном выражении операндов строкового и символьного типов. Если при этом литерной переменной присваивается значение строкового типа, длина строки должна быть равной 1, иначе возникает ошибка.

4. К отдельным символам строки можно обратиться по индексу данного символа в строки, если рассматривать строку как массив символов. При этом нулевой элемент содержит код реальной длины строки, а элементы, начиная с 1-ого, - символы (отличие от обычных массивов). Индекс определяется выражением целого типа (а также целочисленной константой или переменной), которое записывается в квадратных скобках сразу за именем строковой переменной или константы.

Пример. Пусть Str:=’Алфавит’, тогда Str[1+2]=’ф’, Str[7]=’т’, Str[0]=chr(7) (в Str[0] записан код символа ‘ 7’).

Запись STR[0] дает доступ к нулевому байту, который предназначен для указания реально используемого количества символов строки и может изменяться от символа с кодом 0 (строка не содержит ни одного символа) до символа с кодом N (N – максимальный объявленный размер строки). Т. к. в строке не может быть более 255 символов, то максимальный код, хранящийся в нулевом байте равен chr(255).

5. Выражения, в которых операндами служат строковые данные, называются строковыми. Они состоят из строковых констант, переменных, указателей функций и знаков операций. Над строковыми данными допустимы: операция сцепления или конкатенации (+) и операции отношения (=, <>, >, <, >=, <=).

Операция сцепления применяется для сцепления (объединения) нескольких строк в одну результирующую строку (по принципу поезда).

Пример.

а) Str1:=’Группа учащихся’;

Str2:=’ школы – лицея’;

St:=Str1+ Str2; {St=’Группа учащихся школы - лицея’}

б) Str1:=’Группа учащихся’;

St:=Str1+ ’ школы – лицея’; {St=’Группа учащихся школы - лицея’}

в)

Выражение

Результат

‘А’+ ‘Т’+ ‘386’

‘Турбо ’+ ‘Паскаль ’+ ‘7.0’

‘АТ386’

‘Турбо Паскаль 7.0’

Следует помнить, что длина результирующей строки не должна превышать значения, указанного при ее описании в разделе Var, или 255 байтов (если не указана максимальная длина строки для этой переменной).

Операции отношения проводят сравнение двух строковых операндов и имеют приоритет более низкий, чем операция сцепления, т. е. сначала всегда выполняются все операции сцепления, если они присутствуют, и лишь потом реализуются операции отношения. Сравнение строк производится посимвольно слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строковыми операндами всегда имеет логический тип и принимает значение True, если выражение истинно, и False, если ложно. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки считаются равными, если полностью совпадают по длине и содержат одни и те же символы.

Пример.

Выражение

Результат

‘MS-DOS’ < ‘MS-Dos’

True, т. к. коды заглавной буквы меньше кода строчной

‘program’ > ‘PROGRAM’

True, аналогично

‘Принтер ’ > ‘Принтер’

True, т. к. левый операнд длиннее на 1 символ (пробел в конце)

‘Intel’ = ‘Intel’

True, т. к. строки одной длины и содержат одни и те же символы