Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yazyk_Turbo-Paskal.doc
Скачиваний:
17
Добавлен:
15.04.2015
Размер:
754.69 Кб
Скачать

Строки Строковые переменные

Некоторой особой разновидностью одномерных символьных массивов являются специальные составные объекты Паскаля, называемые строками. Их частое использование и специальный набор процедур и функций, работающих со строками, позволяет выделить их в отдельный составной тип.

Строкой называется именованная последовательность символьных данных, расположенных в памяти ПЭВМ подряд. В некотором роде, строка является разновидностью одномерного символьного массива, но в отличие от массива, она внутри себя содержит сведения о текущей (заполненной) длине.

Значения строк в программе записываются в виде последовательности символов, заключенных в апострофы. Количество символов в строке может меняться от 0 до максимального, предусмотренного при выделении места под строку. Если при создании строки ее максимальная длина не оговаривается, она считается равной максимальному значению, равному 255 символов. Текущая длина строки хранится в виде однобайтного целого в нулевом байте строки. Поэтому в памяти ЭВМ строка занимает на 1 байт больше места, чем указано в ее максимальной длине.

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

TYPE

str20 = string[20];{ввели свой тип - строку из 20 символов}

. . .

VAR

Result, Error : str20;{отвели место под 2 строки, каждая по 20 символов, задали им имена}

По второму способу:

VAR

Name : string[20];{создали строку длиной 20 символов с именем Name}

Переменной типа строка можно задавать значения (как и другим типам переменных) тремя различными способами.

Во-первых, значение может быть занесено в строку при ее создании. При этом может быть сформирована строка-константа:

CONST

HELLOW = ' Здравствуйте, я - вежливая программа! ';

или строка-переменная с заданным начальным значением:

CONST

Protocol : string[12] = 'RESULT.TXT';

В отличие от первого случая, содержимое строки Protocolв дальнейшем может быть изменено на другое, но не длиннее 12 символов.

Во-вторых, переменной типа строка может быть присвоено значение строчного выражения с помощью оператора присваивания:

VAR

St1,St2,St3 : string[30];

. . .

Begin

. . .

St1:='Пример '; { St1, St2 и St3 получают значения присваиванием}

St2:='строки';

St3:=St1+'новой '+St2; { в St3 окажется 'Пример новой строки'}

В-третьих переменная типа строка может быть заполнена операцией ввода:

VAR

St1:string[5];

St2:string;

. . .

Begin

. . .

writeln('Введите 1-ю строку');

readln(St1);

{набираем последовательность символов АБВГДЕЖЗ <Enter>}

writeln('Введите 2-ю строку');

readln(St2);

Набираем последовательность символов 'АБВГ ДЕЖЗ" <Enter>, после таких действий переменная St1 будет содержать символы АБВГД, а переменная St2 - 'АБВГ ДЕЖЗ" Текущая длина St1 будет равна 5, St2 - 11 .

Из строковых данных можно строить строковые выражения, в которых в качестве операндов выступают строковые константы, переменные строковые функции и символьные данные. В этих выражениях можно применять операцию сцепления двух или более строк (конкатенации), обозначаемую символом '+'. Результатом будет новая строка (длиной не более 255 символов), содержащая первую строку за последним символом которой начинается вторая и так далее.

Для строк определены все 6 операций отношений. Строки сравниваются посимвольно, слева направо, как только встречается в одной строке символ с меньшим кодом, так эта строка признается за меньшую. Отсутствие символа (более короткая строка) при одинаковом начале определяет меньшую строку. Результат операции отношения - логическое значение. Например:

выражение отношения результат вычисления выражения

'A' < 'B' TRUE

'A ' < 'A' FALSE

'ABCD' < 'ACB' TRUE

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

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

К отдельным символам строки можно обращаться по его номеру в строке. Для этого используется индексное выражение:

VAR St1,St2:string[6];

. . .

Begin

. . .

St1:='ПРИМЕР';

St2:='Вася';

writeln (St1[4]+St1[3]+St1[6]); оператор печати слова МИР

St1[0]:=St2[0]; теперь строка St содержит слово ПРИМ

writeln('St1[0]=',Ord(St1[0])); так можно распечатать содержимое нулевой ячейки строки St1

Нулевой символ содержит текущую длину строки, его значение формируется автоматически, ему нельзя присваивать значение оператором присваивания (оператор st1[0]:=st2[0]сработает, но контроль длинны не выполнится, и последствия могут быть самыми печальными).

Для работы со строками в Турбо Паскале предусмотрено несколько стандартных процедур и функций, хранящихся в библиотеке с именем System.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]