СТРОКИ. ПОНЯТИЕ СТРОКИ И ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ СТРОКОВОГО ТИПА
Один символ считают больше второго, если его код больше.
Символы считаются равными, если равные их коды.
Например:
'A'<'B', '9'<'A', 'A'<'a'.
Для отображения множества символов в подмножество натуральных чисел и обратно есть две стандартных функции:
ord(i) – возвращает порядковый номер (код) символа (i – переменная типа Char);
chr(i) – возвращает символ с порядковым номером i (i – выражение типа byte).
Например,
var k:byte;
c:char;
то истинны операторы
k:=ord('A'); //k=65
c:=chr(65); //c='A'
Вместо функции chr возможно использовать префикс #, который также возвратит символ, код которого указан после него.
c:= #65; //c='A'
Для преобразования маленьких букв на большие используют функцию Upcase(символ), где символ маленькая латинская буква. Функция Upcase не обрабатывает кириллицу.
Поскольку символьные типы принадлежат к порядковым типам, для них определенные такие функции, как Pred, Succ
c:= Pred('B'); // c ® 'A',
c:=Succ('B'); //c ®'C'
В тексте программы последовательность символов, являющаяся строкой, помещается в одинарные кавычки.
Типы строк которые используются в ОР предоставлены в таблицы
Тип строки
Максимальная длина
ShortString
255 байт
String
255 байт/ 2 Гб
AnsiString
2Гб
WideString
2Гб
Значение типа ShortString – это так называемые короткие строки, длина которых не превышает 255 символов.
Объем памяти, который выделяется для хранения значения строковой переменной, будет на один байт больше указанной у объявление общей длины строки.
Каждый символ в строке занимает 1 байт.
Каждый байт имеет свой порядковый номер.
Первый байт имеет номер, равный 0 и содержит символ, код которого равен текущей длине строки.
При выводе строки пользователь не увидит этого символа, но в программе можно прочитать или изменить его значение.
Нулевой символ строки это не число, а символ, и потому для получения числового значения длины строки следует применять встроенную функцию ord, а для записи длины – встроенную функцию chr.
Также как тип короткой строки возможно использовать тип String.
Тип String интерпретируется компилятором ОР по разному, в зависимости от значения директивы {$H}. Если она включена – {$H+} – то тип String интерпретируется как AnsiString, если нет – {$H-} – это как ShortString.
Тип String был первым строковым типом в ТР. Первоначально этот тип был реализован как короткая строка.
Короткие строки располагаются в памяти компьютера до начала выполнения программы (статически).
AnsiString, WideString – представляют собой динамически расположенные в памяти компьютера строки.
В дальнейшем мы будем рассматривать только короткие строки.
Инструкция объявления
var имя1 : String;
имя2 : String[длина];
имя1 : ShortString;
Например:
var stroka : String[30];
stroka1:String[255];//ЭквивалентноShortString
name : String[15];
name1 : ShortString;
Строка фактически является массивом символов.
Одна из характеристик массива – это количество его элементов. Но строка имеет две разновидности длины:
ü общая длина строки, которая характеризует размер оперативной памяти, предоставляемый строке во время ее объявления;
ü текущая длина строки (всегда меньше или равна общей длине) показывает количество смысловых (значимых) символов строки в каждый конкретный момент выполнения программы.
Как и элементы любого массива, символы строки хранятся в последовательно расположенных ячейках оперативной памяти.
Объем памяти, которая выделяется для хранения значения строковой переменной, будет на один байт больше от указанной в объявлении общей длины строки.
Например:
var stroka : String[30];
//резервируется 31 байт – общая длина 30
stroka1 : String[255];
// резервируется 256 байт – общая длина 255
name : String[15];
// резервируется 16 байт – общая длина 15
name1 : ShortString;
// резервируется 256 байт – общая длина 255
Например, предположим что в переменную name ввели строку символов 'Object Pascal'.
Изображение name у оперативной памяти будет таким:
#13
O
b
j
e
c
t
P
a
s
c
a
l
В элементе с индексом 0 хранится символ ♪, код которого равен текущей длине строки 'Object Pascal', т.е. 13. (#12=♀ #1=☺, #2=☻ #3=♥ #11=♂ (Alt+ …))
Элементам с индексами 14, 15 можно со временем присвоить любые символы или прочитать их с клавиатуры. Но на данный момент они не будут отображаться.