Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
830.55 Кб
Скачать

Лекция 7.Строки Строковые типы

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

'abcde' , 'Иванов И.И.' , '10.0' , 'S='.

Константа типа char представляет собой символьную строку единичной длины. Используемые и Object Pascal типы строк приведены в таблице 1.13.

Типы строк. Таблица 1.13.

Тип строки

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

Есть ли нулевой символ в конце

ShortString

255 байт

нет 

AnsiString

2 Гб

есть 

String 

255 байт/2Гб 

есть/нет

WideString 

2Гб

есть

Значение типа ShortString - это так называемые короткие строки, длина которых не превышают 255 символов. Каждый символ занимает один байт, самый первый байт содержит число, указывающее длину строки. Каждый байт имеет свой порядковый номер.Первый байт, содержащий длину строки, имеет номер, равный 0. По номеру символа можно получить доступ к его значению.

Пример 1.

В строке 'Ivanov I:’ дописать полностью имя.

Решение Исходная строка имеет длину равную 9. Увеличим вначале эту длину до 12, а затем поместим в строку недостающие символы.

Программа

program 1;

{$APPTYPE CONSOLE)

uses

SysUtils;

var

s:shortstring;

begin

s : = 'Ivanov I.’;

s [0 ] := chr (12);

s[9]:=’v’;

s[10]:= 'a';

s[11] := 'n’;

s[12] := ‘.’;

writeln('s=',s);

readln

end.

Результат работы программы

s=Ivanov Ivan.

Заметим, что длина строки, хранящаяся в нулевом байте, представлена в символьном виде. Поэтому для преобразования в число следует пользоваться стандартной функци¬ей ord, а обратно - функцией chr.

Короткая строка размещается компилятором в памяти компьютера до начала выполним программы, т.е. статически.

Строка типа AnsiString располагается в памяти иначе. Сама переменная типа AnsiString занимает в памяти 4 байта и является указателем, т.е. содержит адрес той ячейки памяти, начиная с которой будет фактически располагаться символьная строка. Выделение байта в программе происходит на этапе выполнения программы, т.е. динамически. Программа сама определить необходимую длину строки по заданному количеству символов, и операционная система выделяет нужный участок памяти. В конце строки размещается терминальный (завершающий) нуль-#0 и так называемый счетчик ссылок, занимающий 4 байта. Нумерация символов в строке типа AnsiString начинается с единицы т.е. первый символ такой строки имеет индекс 1.

Счетчик ссылок позволяет экономить память. Например ,если в программе имеется фрагмент:

.......................

var s1,s2:ansistring;

.......................

s1:=’stroka’;

s2:=s1;

.......................

то память для размещения переменной s2 не выделяется, а в переменную s2 помещается значение указателя из переменной s1. Счетчик ссылок в области памяти, связанной переменной s1, увеличивает свое значение на 1 и станет равным 2. В общем случае в программе может быть несколько переменных, ссылающихся на одну и ту же строку. Счетчик ссылок равняется количеству ссылающихся на строку переменных. Если одна из ссылающихся на строку типа AnsiString переменных изменит свое значение, то в памяти будет выделено место для новой строки. Число ссылок в прежней строке уменьшается, а в новой строке становится равным 1. Если число ссылок на строку станет равным 0, то строка уничтожается и освобождает место в памяти.

Пример 2.

Составим программу по условию предыдущего примера, используя строку типа AnsiString.

Решение

Для установки длины строки будем использовать стандартную процедуру SetLength

Программа

Program 2;

($AРРТУРЕ CONSOLE}

uses

SysUtils;

var

s:ansistring;

begin

s := 'Ivanov I. ‘;

setlength(s,12);

s [ 9 ] : = ' v' ;

s [ 10 ] : = ' a' ;

s[ 11]:='n’;

s [ 12] : =’. ';

writeln('s=’,s);

readln

end.

Результаты работы программы

s=Ivanov Ivan.

Заметим, что нумерация символов в строке типа AnsiString начинается с 1.

Тип String интерпретируется компилятором Object Pascal по разному ,в зависимости значения директивы компилятора $H. Если она включена-{$H+}-то тип String интерпретируется как AnsiString, если нет –{$H-}- то как ShortString. По умолчанию действует директива {$H+}.

Если в разделе type указано, например, String[10], то независимо от директив компилятора трактуется как ShortString с указанным числом символов.

Тип WideString также представляет собой динамически размещаемые в памяти компьютера строки, длина которых ограничена только объемом свободной памяти компьютера. Однако в отличие от строки типа AnsiString каждый символ является Unicode-символом, т.е. кодируется 2 байтами. Поэтому в строке типа WideString по сравнению со строкой типа AnsiString, имеющей такую же длину, количество символов вдвое меньше.

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