Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_pas#9'11.doc
Скачиваний:
4
Добавлен:
16.07.2019
Размер:
101.38 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА #9

СТРОКИ

Теоретическая часть

В Delphi существует три вида строк:

Тип

Максимальная длина

Требуемая память

Используется для

ShortString

255 символов

от 2 до 256 байт

обратной совместимости

AnsiString

~2^31 символов

от 4 байт до 2GB

8-битных (ANSI) символов

WideString

~2^30 символов

от 4 байт до 2GB

символов Unicode

Эти строки можно совместно использовать в выражениях и операторах присваиваниях; компилятор автоматически выполнит требуемые преобразования. Но строки, которые передаются функциям и процедурам по ссылке (как var или out параметры), должны быть одного типа. Одни строки можно явно преобразовывать к строкам другого типа.

Между собой эти строки различаются тем, где хранится строка и как выделяется и освобождается память для неё. Зарезервированное слово string по умолчанию означает тип AnsiString, но если после него стоит число в квадратных скобках, то это означает тип ShortString, а число – ограничение по длине. Кроме того, существует опция компилятора Huge strings (управляется также директивами компилятора {$H+/-} и {$LONGSTRINGS ON/OFF}), которая по умолчанию включена, но если её выключить, то слово string станет эквивалентно ShortString или, что то же самое, string[255]. Эта опция введена для обратной совместимости с Turbo Pascal, в новых программах отключать её нет нужды.

Тип ShortString (короткая строка) - это массив символов с индексами от 0 до N, где N - число символов, указанное при объявлении переменной (в случае использования идентификатора ShortString длина строки N явно не указывается и равно 255). Нулевой элемент массива хранит текущую длину строки, которая может быть меньше или равна объявленной. Если S переменная типа ShortString, то Ord(S[0]), как и функция Length(S), возвращает длину строки S; вызов процедуры SetLength изменяет длину строки S.

Тип AnsiString (длинная строка) имеет фактически неограниченную длину, и заботиться о выделении памяти для нее не нужно. Фактически переменная типа AnsiString - это указатель на первый символ строки. Перед этой строкой в память записывается дополнительная информация: длина строки. Это позволяет компилятору генерировать код, автоматически выделяющий, перераспределяющий и освобождающий память, выделяемую для строки. Работа с памятью происходит совершенно прозрачно для программиста, в большинстве случаев со строками AnsiString можно работать, вообще не задумываясь об их внутреннем устройстве. Символы в таких строках нумеруются с единицы, чтобы облегчить перенос старых программ, использовавших ShortString.

Строки можно индексировать так же, как одномерные массивы. Если S переменная строкового типа, то S[i] представляет i-й символ (или, строго говоря, i-й байт) строки S. Для ShortString и AnsiString S[i] имеет тип AnsiChar, а для WideString S[i] имеет тип WideChar.

Строковые константы

Строковые константы записываются как последовательности символов, ограниченные апострофами. Допускается формирование строк с использованием записи символов по коду (в виде комбинации # и кода символа в десятичной или шестнадцатеричной системе счисления) и управляющих символов (комбинации ^ и некоторых заглавных латинских букв). Пустой символ обозначается двумя подряд стоящими апострофами. Если апостроф входит в строку как литера, то при записи он удваивается. Примеры записи строковых констант:

'Press any key to continue, ESC to stop'

#7'Error !'#13'Press any key...'#7

'Line 1'#$0A#$0D'Line 2'

'QWERTY'^A^M

''

'That''s string'

Операции над строковыми данными

Над строковыми данными определена операция слияния (конкантенации), обозначаемая знаком +. Например, если имеются объявления

var Str1, Str2, Str3: string;

то в результате выполнения присваиваний

Str1 := 'Turbo';

Str2 := 'Pascal';

Str3 := Str1 + Str2;

переменная Str3 приобретет значение 'TurboPascal'.

Кроме слияния над строками определены операции сравнения <,>,=,<>,<=,>=. Две строки сравниваются посимвольно, слева направо, по кодам символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются символом с кодом 0. Например, строка 'Turbo' больше строки 'Turb'.

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

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

Функция Concat (S 1, S 2, ..., S n) возвращает строку, являющуюся слиянием строк S 1, S 2, ..., S n.

Функция Copy (S, Index, Count) возвращает подстроку длиной Count, начинающуюся с позиции Index строки S.

Процедура Delete (S, Index, Count) удаляет из строки S, начиная с позиции Index, подстроку длиной Count.

Процедура Insert (Source, S, Index) вставляет в строку S подстроку Source, начиная с позиции Index.

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

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

Процедуры преобразования типов

Процедура Str (X, S) преобразует числовое значение X в строку S, при этом для X может быть задан формат, как в процедурах вывода write и writeln. Например:

X := 123;

S := str(X:6, S);

Результат: S = ' 123'.

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

Функции для работы с символами

В дополнение приведем некоторые функции, связанные с типом Char, но которые, тем не менее, часто используются при работе со строками.

Функция Chr (X) возвращает символ по коду, равному значению выражения X. Если X можно представить как числовую константу, то можно также пользоваться записью #X.

Функция Ord (X) возвращает код символа X.

Функция UpCase (X) возвращает соответствующую прописную латинскую букву (если X - строчная латинская буква), в противном случае символ X возвращается без изменения.

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