Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 1).doc
Скачиваний:
104
Добавлен:
15.04.2015
Размер:
1.69 Mб
Скачать

7.4. Строки

7.4.1. Основные понятия

Строки используются для хранения последовательностей символов. В Паскале существует три типа строк:

  • стандартные (string);

  • определяемые программистом на основе string;

  • строки в динамической памяти (этот вид строк будет рассматриваться позже).

Строка типа string может содержать до 255 символов. Под каждый символ отво­дится по одному байту, в котором хранится код символа. Еще один байт отво­дится под фактическую длину строки. Таким образом, в памяти под одну пере­менную типа string всегда отводится 256 байт.

Для коротких строк использовать стандартную строку неэффективно, поэтому в язык введена возможность самостоятельно задавать максимальную длину стро­ки, например:

type

str6 = string [6];

Здесь описан собственный тип данных с именем str6. Переменная этого типа за­нимает в памяти 7 байт.

Внимание. Длина строки должна быть константой или константным выражением, потому что инструкции по выделению памяти формируются компилятором до начала выпол­нения программы.

Примеры описания строк:

const

n = 15;

var

s : string; { строка стандартого типа }

s1 : str6; { строка типа str6, описанного выше }

s2 : string [n]; { описание типа задано при описании переменной }

Инициализация строк, как и переменных других типов, выполняется в разделе описания констант.

const

s3 : string [15] = '1234567890';

Внутреннее представление строки s3 изображено на следующем рисунке.

7.4.2. Операции над строками

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

s2 := '1234567890';

s1 := s2: { в s1 будут помещены символы "123456" }

  1. Строки можно склеивать (сцеплять) между собой с помощью операции конкате­нации, которая обозначается знаком +, например:

s1 := 'ком':

s2 := s1 + 'пот'; { результат - "компот" }

  1. Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны. В строках разной длины существующий символ всегда больше соответствующего ему отсутствующего символа.

'abc' > 'ab'

'abc' = 'abc'

'abc' < 'abc '

  1. Имя строки может использоваться в процедурах ввода-вывода:

readln (s1);

write (s1):

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

  1. К отдельному символу строки можно обращаться как к элементу массива симво­лов, например sl[4]. Символ строки совместим с типом char, их можно использо­вать в выражениях одновременно, например:

sl[4] := 'x';

writeln (s2[3] + s2[5] + 'г');

7.4.3. Процедуры и функции для работы со строками

При работе со строками, как правило, возникает необходимость выполнять опре­деленный набор действий со строкой и ее фрагментами, например копирова­ние, вставку, удаление или поиск. Для эффективной реализации этих действий в Паскале предусмотрены стандартные процедуры и функции.

  1. Функция Concat(si, s2.....sn) возвращает строку, являющуюся слиянием строк s1, s2,..., sn. Ее действие аналогично операции конкатенации.

  2. Функция Copy(s, start, len) возвращает подстроку длиной len, начинающуюся с позиции start строки s. Параметры len и start должны быть целого типа.

  3. Процедура Delete(s, start, len) удаляет из строки s, начиная с позиции start, подстроку длиной len.

  4. Процедура Insert(subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start.

  5. Функция Length(s) возвращает фактическую длину строки s, результат имеет тип byte.

  6. Функция Pos(subs, s) ищет вхождение подстроки subs в строку s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s.

  7. Процедура Str(x, s) преобразует числовое значение х в строку s, при этом для х может быть задан формат, например Str(x:6:2. s).

  8. Процедура Val (s, x, errcode) преобразует строку s в значение числовой перемен­ной х, при этом строка s должна содержать символьное представление числа. В случае успешного преобразования переменная errcode равна нулю. Если же обнаружена ошибка, то errcode будет содержать номер позиции первого ошибоч­ного символа, а значение х не определено.