- •Часть I
- •1.1 Простейшее консольное приложение. Основные понятия
- •Задачи.
- •1.2 Простые типы
- •Целые типы.
- •Задачи.
- •Символьные типы.
- •Логические типы
- •Перечислимый тип
- •Задачи.
- •Вещественные типы
- •Тип дата-время
- •1.3 Операторы Оператор присваивания
- •Составной оператор
- •Условный оператор if
- •Задачи.
- •Оператор выбора case
- •Задачи.
- •Операторы цикла
- •Задачи.
- •Задачи.
- •Задачи.
- •1.4 Процедуры и функции.
- •Процедуры.
- •Функции.
- •Вызов подпрограмм.
- •Локализация имён.
- •Параметры.
- •Задачи.
- •Перегрузка функций.
- •Процедурные типы.
- •1.5 Динамическая память и указатели
- •1.6 Массивы
- •Статические массивы
- •Задачи.
- •Задачи.
- •Задачи.
- •Задачи.
- •Динамические массивы
- •Параметры-массивы
- •1.7 Строки Строковые типы
- •Стандартные подпрограммы для строк.
- •Строковые выражения
- •Задачи.
- •Преобразование строк в числовые типы и обратно.
- •1.8 Множества
- •Задачи.
- •1.9 Записи
- •Задачи.
- •Литература.
- •Оглавление
1.7 Строки Строковые типы
Строка представляет собой набор символов, заключённый в апострофы. Например: abcdef Иванов И.И. 10.0 S =
Константа типа char представляет собой символьную строку единичной длины. Используемые в Object Pascal строковые типы приведены в следующей таблице:
-
Тип строки
Максимальная длина
Нулевой символ в конце
ShortString
255 байт
Нет
AnsiString
2 Гб
Есть
String
255 байт / 2 Гб
Нет / Есть
WideString
1 Гб
Есть
Значение типа ShortString – это так называемые короткие строки, длина которых не превышает 255 символов. Каждый символ занимает один байт, самый первый байт содержит число, указывающее длину строки. Каждый байт имеет свой порядковый номер. Первый байт, содержащий длину строки, имеет номер 0. По номеру символа можно получить доступ к его значению, указав номер символа в квадратных скобках после имени строки.
Например, для строки st , имеющей тип shortstring и значение st = Object , получим:
ord(st[0])=6, st[1]=O, st[2]=b, st[3]=j, st[4]=e, st[5]=c, st[6]=t.
Длина строки, хранящаяся в нулевом байте, представлена в символьном виде, поэтому для преобразования в число следует воспользоваться стандартной функцией ord, а обратно – функцией chr.
Короткая строка размещается компилятором в памяти компьютера до начала выполнения программы, т.е. статически.
Строка типа AnsiString располагается в памяти иначе. Сама переменная типа AnsiString занимает в памяти 4 байта и является указателем, т.е. содержит адрес той ячейки памяти, начиная с которой будет фактически располагаться символьная строка. Выделение места в памяти происходит на этапе выполнения программы, т.е. динамически. Программа сама определяет необходимую длину строки по заданному количеству символов, и операционная система выделяет нужный участок памяти. В конце строки размещается терминальный (завершающий ) нуль – символ #0 и так называемый счётчик ссылок, занимающий 4 байта. Счётчик ссылок позволяет экономить память. Например, если в программе имеется фрагмент:
……………………………………
var s1, s2 : ansistring;
……………………………………
s1 stroka ;
s2 s1;
…………………………………..
то память для размещения переменной s2 не выделяется, а в переменную s2 помещается значение указателя из переменной s1. Счётчик ссылок в области памяти, связанной с переменной s1, увеличивает своё значение на 1 и станет равным 2. В программе может быть несколько переменных, ссылающихся на одну и ту же строку. Счётчик ссылок равняется количеству ссылающихся на строку переменных. Если одна из ссылающихся на строку типа AnsiString переменных изменит своё значение, то в памяти будет выделено место для новой строки. Число ссылок в прежней строке уменьшится на 1, а в новой строке становится равным 1. Если число ссылок на строку станет равным 0, то строка уничтожается и освобождает место в памяти. Нумерация символов в строке типа AnsiString начинается с 1. Процедура SetLength, которую мы использовали для установления длины динамического массива, может быть также использована для установления длины строки типа AnsiString.
Тип String интерпретируется компилятором Object Pascal по-разному, в зависимости от значения директивы компилятора $H. Если она включена – {$H+} – то тип String интерпретируется как AnsiString, если нет – {$H-} – то как ShortString. По умолчанию действует директива {$H+}.
Если в разделе описаний указано, например String[10], то независимо от директив компилятора тип трактуется как ShortString с указанным числом символов.
Тип WideString также представляет собой динамически размещаемые в памяти компьютера строки, длина которых ограничена только объёмом свободной памяти компьютера. Однако в отличие от строки типа AnsiString каждый символ является Unicode-символом, т.е. кодируется 2 байтами.
Пример 43. В строке Ivanov I. дописать полностью имя (Ivan).
var s : ansistring;
begin
s:='Ivanov I.';
setlength(s, 12);
s[9]:='v'; s[10]:='a'; s[11]:='n'; s[12]:='.';
writeln(s);
readln;
end.
