Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_inf_2.doc
Скачиваний:
1
Добавлен:
07.09.2019
Размер:
1.3 Mб
Скачать

2.3. Строки

Строки занимают промежуточное положение между простыми и структурированными типами данных. Почему строки нельзя отнести к простым типам? Здесь все ясно. Строка – это последовательность символов, иными словами – структура, состоящая из элементов простого типа.

Почему строки нельзя отнести к структурированным типам? Это объяснить сложнее. Во-первых, строковый тип в Тurbо Раsсаl относится к стандартным типам данных, а ни один из структурированных типов, с которыми мы познакомимся позже, стандартным не является.

Во-вторых, над строками применимы некоторые действия, допустимые для данных простых типов и неприменимые к структурированным типам. Например, строку можно ввести с клавиатуры или вывести на экран, воспользовавшись операторами Read(х) и Write(х) соответственно, где Х – строковая переменная. Также допустимо сравнивать целые строки. Однако эти действия невозможны с данными структурированных типов – массивами или записями, о которых речь пойдет позже.

Строковый тип данных известен также как тип STRING. (STRING – не идентификатор, а зарезервированное слово). Тип STRING наряду с целочисленными и вещественными типами, а также типами Сhаr и Boolean, о которых речь шла выше, относится к стандартным типам данных. Значение типа STRING представляет собой строку, длиной до 255 символов. Вот примеры таких значений:

‘12345' '@#$&' 'TRUE' 'АБВГД' 'Введите значение А'

Следует понимать, что строка '12345' не имеет ничего общего с числами и над ней нельзя проводить арифметических действий, как и со значениями типа Сhar '1 ' 5' ' 8'. Также строка 'TRUE' вовсе не является значением типа Вооlеаn.

Так может выглядеть раздел описаний переменных, в котором объявлены переменные типа STRING:

vаr

а:string;

b:string[80];

Как уже отмечалось, значение типа STRING представляет собой строку, длиной до 255 символов (с 1 по 255). При этом нулевой байт строки содержит информацию о ее текущей длине.

В случае, если максимальная длина строки не указана явно (как у переменной А в примере выше), по умолчанию она считается равной 255 символов. Однако при объявлении переменной можно задать иную максимальную длину строки. Так, значение переменной В (см. выше) представляет собой строку, длиной до 80 символов.

Текущая длина строки – величина изменяющаяся, определяемая реальными данными, которая, однако, не может превышать максимальную длину, указанную для данной строковой переменной. Как уже упоминалось, информация о текущей длине строки содержится в ее нулевом байте.

Каким будет содержимое оставшихся не использованными байтов строковой переменной, текущее значение которой короче максимальной длины? Дело в том, что длина текущего значения строковой переменной фиксируется постоянно (в нулевом байте). Благодаря этому, к "лишним" байтам просто нет доступа, поэтому их содержимое совершенно не важно.

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

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

а[5]:='F’;

write(b[33]);

Поскольку отдельные символы строки представляют собой значения типа Сhаr, над элементами строки допустимы те же действия, что и над символьными значениями – прежде всего операции сравнения =, <>, >=, <, <= (см. табл.2). Результатом применения этих операций к элементам строки будет значение типа Вооlеаn (так же, как и при применении этих операций к значениям других типов). Вот примеры использования операций сравнения с элементами строк:

if а[5]>'F' then ...

while b[11]='4' dо ...

2.3.1.2. Действия над строкой. Что касается операций над строкой в целом, то, как указывалось в начале раздела о строках, можно значения типа STRING вводить с клавиатуры и отображать на экране с помощью единственного оператора. Например:

Read(a);

Write(b);

В первом случае значение переменной A (цепочку символов, длина которой не превышает максимальной длины строки) придется ввести с клавиатуры (опустив при этом апострофы). Во втором случае значение строковой переменной В (последовательность символов) окажется выведено на экран.

Также можно всей строке (т.е. строковой переменной) сразу присвоить нужное значение. При этом явно заданное значение типа STRING заключается в апострофы. Например:

а:= 'Это строка'

b:= ‘’

В последнем случае строковой переменной В присвоена в качестве значения так называемая "нулевая строка" (т.е. строка, включающая только нулевой символ с информацией о ее длине, которая равна нулю).

Кроме того, для строк допустима операция объединения (или сцепления, или конкатенации). Вот как это выглядит:

а:= 'Это строка, '+'которая '+'служит примером.'

После выполнения этого оператора значением переменной А станет строка:

'Это строка, которая служит примером.'

При этом, если длина объединенной строки превысит максимальную длину, допустимую для переменной А, "лишние" символы окажутся отброшены.

Операцию объединения можно применять не только к явно заданным значениям, но и к переменным типа STRING:

а:=b;

Здесь А, В и С – строковые переменные. В результате выполнения этого оператора текущие значения переменных В и С окажутся слиты и полученное строковое значение будет присвоено переменной А.

Также к строкам применимы операции сравнения. Например, в программе могут встретиться операторы:

'АВС'<'АВс';

a<b;

В первом случае сравниваются строковые значения, заданные явно, во втором – переменные строкового типа.

2.3.1.3. Манипулирование длиной строки. Возможно также воздействие на длину строки. Как уже упоминалось, информация о текущей длине строки содержится в ее нулевом байте, к которому можно обратиться так же, как и к остальным элементам строки, например,

j:=оrd(а[0])

Таким образом, можно выяснить текущую длину строки. (Правда, для этого существует специальная функция Length, о которой мы узнаем дальше.) Таким же образом можно изменить текущую длину строки, например, уменьшить, присвоив иное значение, чтобы "отсечь" ненужное содержимое строковой переменной.

Судя по оператору j:=оrd(а[0]), информация о длине строки хранится в ее нулевом байте не как число, а в виде символа таблицы АSCII, код которого и соответствует длине. Это предположение подтверждает тот факт, что максимальная длина строки составляет 255 символов (не считая нулевого байта), а в таблице АSCII содержится 256 символов (с 0 по 255). Иными словами, если воспользоваться оператором write(а[0]), то на экран окажется выведено не число, а символ.

2.3.2. Применимые стандартные процедуры и функции. Подпрограммы, предназначенные для работы со строками, содержатся в модуле SYSTEМ. Речь идет о таких процедурах и функциях, как Соnсаt, Сору, Delete, Insert, Length, Роs, Str и Val.

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