Символьный тип
Символьные типы предназначены для хранения одного символа. Они относятся к целым порядковым типам. Ниже приведена таблица символьных типов. Наличие двух разных типов — 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 или со строковой константой. Строки сравниваются посимвольно, начиная с первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом.
Дата добавления: 2015-03-19; просмотров: 1602;