- •Строковые константы
- •Операции над строковыми данными
- •Процедуры и функции для работы со строками
- •Примеры для выполнения лабораторной работы
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Вариант 18
- •Вариант 19
- •Вариант 20
ЛАБОРАТОРНАЯ РАБОТА #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 возвращается без изменения.