Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Данные строкового типа

Типизированные константы

 

В Delphi (и в Турбо Паскале) можно использовать типизированные константы. В отличие от нетипизированных констант, объявляемых в разделе CONST, типизированные константы можно изменять в процессе выполнения программы. Фактически они представляют собой переменные, которые получают начальные значения до начала выполнения программы. В процессе выполнения программы им можно присваивать новые значения также как и обычным переменным соответствующего типа.

Замечание. Изменять значения типизированных констант можно во всех версиях Delphi, но в версиях 6 и 7 надо установить флажок Assignable typed constants на вкладке Project>options>compiler.

Типизированная константа приобретает указанное в ее объявлении значение только один раз – до начала выполнения программы. При повторном входе в блок, в котором она объявлена, инициализация не производится и она сохраняет то значение, которое имела к моменту выхода из данного блока.

Типизированные константы объявляются в разделе Const. Форма объявления имеет вид

<идентификатор>: < тип> = <значение>

Здесь <идентификатор> - имя константы; < тип> -тип константы; <значение> - значение константы.

Пример. X: Extended = 1.25;

Max: Integer = 50;

Sm: char = 'Y';

St: String = '*****';

Правила. Нельзя использовать типизированные константы в качестве границ диапазона. Нельзя указывать в левой части список идентификаторов.

 

Следующие записи является ошибочными

Ms: Array [0.. Max] of Extended;

M, N, J: Integer = 1;

При объявлении констант массивов список начальных значений элементов массива заключается в круглые скобки. Разделителем значений в скобках является символ "запятая".

Пример. Const

Msa: Array [1.. 4 ] Of Integer = (0, 1, 2, 3);

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

Пример.

Const

Msb: Array [ 1.. 3, 1.. 4 ] of Integer =

((1, 2, 3, 4),

(5, 6, 7, 8),

(9, 10, 11, 12));

Нетрудно заметить, что набор значений для двумерного массива располагается по строкам.

В языке Delphi для обработки текстов можно использовать четыре строковых типа:

- String – универсальная строка;

- AnsiString – длинная строка;

- ShortString – короткая строка;

- Pchar – строка, оканчивающаяся нулем;

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

 

4.15.1. Строка типа String.

Тип String является универсальным. В зависимости от директивы компилятора {$H} он может вести себя как "короткая строка" или как "длинная строка". Обычно строковый тип объявляют в разделе переменных. Форма объявления имеет вид:

Var список: String;

Если задана директива {$H}, то строка типа String ведет себя как "длинная строка", если же установлена директива {$H-}, то строка ведет себя как "короткая строка. При объявлении данных типа String можно указывать максимальную длину строки в квадратных скобках после зарезервированного слова String

Var список: String[n];

где n - любая константа порядкового типа не более 255, если n не указано, то то длина строки имеет максимальное значение равное 255.

Пример. Var Stx: String;

St20: String[20];

Строки с явным указанием размера всегда являются "короткими строками".

Для каждого символа в строке отводится один байт. Самый первый байт имеет номер 0 и содержит текущую длину строки. Первый символ строки занимает второй байт и имеет номер 1.

К любому символу в строке можно обратиться как к элементу массива, например

Var St: String;

........

If St[k] = 'A' Then....

 

4.15.2. Строка типа AnsiString

Этот тип предназначен для размещения символов ANSI – кодировки и представляет собой массив символов, в который можно поместить любое количество символов.

Пример. Var Sk: String;

Sa: AnsiString;

Переменная типа AnsiString фактически является указателем на динамически выделенную под эту строку память. Если строка пустая, то этот указатель имеет значение nil. Динамическая область памяти, выделяемая для переменной типа AnsiString имеет достаточно сложную структуру. Левые восемь байт предназначены для хранения служебной информации (будем нумеровать их отрицательными числами). Байты с порядковыми номерами 0..N-1, где N – длина строки, отводятся под символы строки (эти байты индексируются начиная с единицы). В байте номер N хранится признак конца строки (символ с кодом 0), необходимый для совместимости со строкой типа Pchar широко используемой в Windows.

Байты с номерами –4.. –1 предназначены для хранения текущей длины строки. Байты с номерами –8..-5 предназначены для хранения кратности ссылок на данную строку. Байты с отрицательными номерами непосредственно недоступны для программы.

 

4.15.3. Строка типа ShortString

Строка типа ShortString представляет собой массив, в который можно поместить до 255 символов. Максимальная длина строки равна 256 байт. Байт с номером 0 предназначен для хранения текущей длины строки, причем длина строки в этом байте представляется в символьном виде.

Строка ShortString совместима со строками любых других типов, ей можно присваивать значение другой строки любого типа. Значение строки ShortString можно так же присваивать строке другого типа кроме строки, оканчивающейся нулем (типа Pchar).

4.15.4. Строка типа Pchar

Эта строка введена в Delphi для совместимости с подпрограммами ОС Windows? которые работают только с подобными строками. Строка типа Pchar представляет собой последовательность символов, завершающуюся символом с кодом 0. У таких строк, как и у "длинных" строк, никаких ограничений на длину строки не накладывается (длина строки лимитируется только доступной памятью). Фактически тип Pchar является указателем на ту область памяти, где располагается строка.

4.15.5. Операции.

К строкам и отдельным элементам строки можно применять операции сравнения > >= < <= = <>.

Операции сравнения над двумя строками выполняются посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, то недостающие символы короткой строки заменяются значением Chr(0). При сравнении сравниваются коды символов. Следует иметь в виду, что русские буквы пронумерованы не подряд. Диапазоны кодов символов приведены на рис.7.5.

Цифры

Символ 0...... 9

код 80...... 89

Латинские буквы

Символ A...... Z; a...... z

Код 65..... 90; 97...... 122

Русские буквы

Символ А....Я; а.... п; р.... я

Код 128... 159; 160... 175; 224... 239

 

Код символа можно определить с помощью стандартной функции ORD().

К строкам можно применять операцию конкатенации (+) - соединение строк в одну строку.

Const T1 = ' ABC ', T2 = ' SX ';

Var

Rt: String [ 10 ];

.......

Rt: = T1 + T2;

 

Rt = ' ABCSX '

 

Если длина сцепленной строки превысит размер строки (n), то лишние символы справа отбрасываются.

В ТР можно использовать имена функций типа String, то есть можно объявить функцию так

Function имя (список): String;

При этом нельзя указывать длину строки.

 

4.15.5. Стандартные процедуры и функции.

В Delphi определен широкий набор стандартных процедур и функций для работы со строками.

Функция Concat (S1, S2,... Sn); - возвращает конкатенацию (соединение) строк S1, S2,...в одну строку.

Пример.

Var T1, T2, Rt: String;

.......

T1: = ' ABC '; T2: = ' XZ ';

Rt: = Concat (T1, T2);

.......

Rt ' ABCXZ '

 

Функция Copy (s, k, n) - копирует из строки s подстроку длиной n символов, начиная с позиции k.

Пример: Var St1, St2: String;

........

St1: = ' ABCZY ';

St2: = Copy (St1, m, n);

 

Если m = 3, n = 2 то результат St2 = ' CZ '

 

Функция Length (s) - возвращает текущую длину строки.

Пример

ds: = Length (St1);

 

ds = 5

 

Функция Pos (S1, S2); - определяет номер позиции первого символа подстроки S1 в строке S2 (иначе 0).

Пример: Var Sa, Sb: String;

N: Integer;

.........

Sb: = ' ABCDFBE ';

Sa: = ' CD ';

 

N: = Pos (Sa, Sb); N = 3

N: = Pos (' B ', Sb); N = 2

N: = Pos (' X ', Sb); N = 0

Процедура Delete (s, m, n); -возвращает строку, полученную путем удаления из s n символов, начиная с позиции m.

 

Пример: Var Sx: String;

K, J: Integer;

......

 

Sx: = ' ABCDEF ';

Delete (Sx, K, J);

 

если K = 2, J = 3 то Sx = ' AEF '

 

Процедура Insert (s1, s2, k); - вставляет строку s1 в строку s2, начиная с позиции k.

 

Пример: Var Sa, Sb: String;

.....

 

Sa: = ' 12345 '; Sb: = ' + ';

 

Insert (Sb, Sa, 4);

 

Sa = ' 123 + 456 '

 

Процедура Str(X[: sp:dz], s1); - преобразует число X вещественного или целого типа в строку символов s1 (также, как это делает процедура Writeln перед выводом). Параметры: sp - ширина поля; dz - количество десятичных знаков).

 

Пример: Var Sa: String;

N: Integer;

A: Extended;

........

Str (N, Sa);

N = 15 Sa = ' 15 '

 

Str (A, Sa);

A = 2. 56 E 3 Sa = ' 2.56000... 0E + 0003 '

Str (A: 6: 2, Sa);

A = 8. 23E+1 Sa = 82.30

 

Процедура Val (s, v, k); - преобразует строку s в ее числовое представление, определяемое переменной v целого или вещественного типа.

 

val (Sa, Z, n);

 

Sa = ' 2 7. 6 ' Z = 2. 7600...0E + 0001

 

Если в строке sa встретится недопустимый символ, то его код возвращается в параметре k.

 

<== предыдущая лекция | следующая лекция ==>
Модули | Отладка программы
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 425; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.06 сек.