Банковское дело

Символьный тип

Символьные типы предназначены для хранения одного символа. Они относятся к целым порядковым типам. Ниже приведена таблица символьных типов. Наличие двух разных типов — ANSICharиWideCharсвязано с двумя различными множествами символов: ANSI, каждый символ которого занимает 1 байт, и Unicode, каждый символ которого занимает 2 байта. Первые 256 символов в этих множествах одинаковы и соответствуют символам ASCII от 0 до 255.

Тип Размер в байтах Что может хранить
ANSIChar Один символ ANSI
WideChar Один символ Unicode
Char Сейчас эквивалентен ANSIChar. В будущих версиях Delphi может быть будет эквивалентен WideChar

Родовым (т.е. обеспечивающим максимальную производительность) является тип Char,который в настоящий момент эквивалентен типу ANSIChar,но в последующих версиях это может быть изменено. Именно тип Charимеет смысл использовать во всех случаях, кроме обращений к функциям, требующим другой тип символьных данных.

Приведенные в таблице затраты памяти могут изменяться от версии к версии и от системы к системе. Поэтому, если требуется достоверно знать затраты памяти для того или иного типа, следует пользоваться функцией SizeOf.

Для символьного типа предопределена функция Chr,возвращающая символ любого целого значения в пределах AnsiCharили WideChar.Например, Chr(65) возвращает букву «А». Поскольку символьные типы относятся к порядковым, для них предопределены такие функции и процедуры, как Ord, Pred, Succ, Inc, Decи др. Функция Ord,возвращающая номер символа, противоположна по смыслу функции Chr.Т.е. Ord(Chr(65))вернет 65, a Chr(Ord(‘A’))вернет символ «А».

Как и любая переменная программы, переменная типа char может получить значение в результате выполнения инструкции присваивания. Если переменная типа char получает значение в результате выполнения операции присваивания, то справа от знака := должно стоять выражение типа char, например, переменная типа char или символьная константа — символ, заключенный в кавычки.

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

c1 := ‘*’;

с2 := c1;

переменная c1 получает значение присваиванием значения константы, а переменная с2 — присваиванием значения переменной cl (предполагается, что переменные c1 и с2 являются переменными символьного типа).

Переменную типа char можно сравнить с другой переменной типа char или с символьной константой. Сравнение основано на том, что каждому символу поставлено в соответствие число (см. приложение 2), причем символу ‘о’ соответствует число меньшее, чем символу У, символу ‘А’ — меньшее, чем ‘в’, символу V — меньшее, чем а. Таким образом, можно записать:


‘0’<'1'<..<'9'<..<'A'<'B'<..<'Z'<'a'<'b'<..<'z'

Символам русского алфавита соответствуют числа большие, чем символам латинского алфавита, при этом справедливо следующее:

‘А’<'Б'<'В'<..<'Ю'<'Я'<'а'<'б'<'в'<...<'э'<'ю'<'я'

В тексте программы вместо символа можно указать его код, поставив перед числом оператор #. Например, вместо константы ‘в’ можно записать #193. Такой способ записи, как правило, используют для записи служебных символов или символов, которые во время набора программы нельзя ввести с клавиатуры. К примеру, часто используемый при записи сообщений символ «новая строка» записывается так: #13.

Cтроки

Перейдем теперь к изучению массивов специального вида — линейных массивов, состоящих только из символов, — строк.

Строки могут быть представлены следующими типами: shortstring, Longstring и widestring. Различаются эти типы предельно допустимой длиной строки, способом выделения памяти для переменных и методом кодировки символов.

Переменной типа shortstring память выделяется статически, т. е. до начала выполнения программы, и количество символов такой строки не может превышать 255. Переменным типа Longstring и widestring память выделяется динамически — во время работы программы, поэтому длина таких строк практически не ограничена.

Тип строки Максимальная длина Используется для Нулевой символ в конце
ShortString обратной совместимости нет
AnsiString -231 (-2 Гб) символов ANSI есть
String или 255, или до-2 Гб символов ANSI или Unicode есть или
нет
WideString -230 (-1 Гб) символов Unicode, в серверах СОМ и интерфейсах есть

Родовым является тип String,который имеет разный смысл в зависимости от директивы компилятора $Н. Если включена директива {$Н+}(она включена по умолчанию), то Stringинтерпретируется компилятором как тип AnsiString— длинная строка с нулевым символом в конце. Если же включить директиву {$Н-}, то Stringинтерпретируется компилятором как тип ShortString— короткая строка без нулевого символа в конце. Если в объявлении типа после ключевого слова Stringследует число символов в квадратных скобках (например, String[4]),то, независимо от директив компилятора, тип трактуется как строка без нулевого символа в конце с указанным числом символов.

Переменная строкового типа должна быть объявлена в разделе объявления переменных. Инструкция объявления в общем виде выглядит так:

Имя: String;

или

Имя: String [длина]

где:

· имя — имя переменной;

· string — ключевое слово обозначения строкового типа;

· длина — константа целого типа, которая задает максимально допустимую длину строки.

Пример объявления переменных строкового типа:

name: string[30];
buff: string;

Если в объявлении строковой переменной длина строки не указана, то ее длина задается равной 255 символам, т. е. объявления

stroka: string [255]; stroka: string;

эквивалентны.

В тексте программы последовательность символов, являющаяся строкой (строковой константой), заключается в одинарные кавычки. Например, чтобы присвоить строковой переменной parol значение, нужно записать:

parol:= ‘Большой секрет’; или parol:= ‘2001’;

Следует обратить внимание, что инструкция parol:=2001; неверная, т.к. тип константы не соответствует типу переменной. Во время компиляции этой инструкции будет выведено сообщение: incompatible types: ‘Char’ and ‘Integer’ (типы Char и Integer несовместимы).

Необходимо отметить, что один символ и строка длиной в один символ

var c: char; s: string[1];

совершенно не эквивалентны друг другу. Вне зависимости от своей реальной длины, строка относится к конструируемым структурированным типам данных, а не к базовым порядковым (см. лекцию 2).

Используя операции =, <, >, <=, >= и о, переменную типа string можно сравнить с другой переменной типа string или со строковой константой. Строки сравниваются посимвольно, начиная с первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом.

#

Добавить комментарий