Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
выш.мат. методичка.DOC
Скачиваний:
30
Добавлен:
13.02.2015
Размер:
1.71 Mб
Скачать

6.2. Строка типа string

В Turbo Pascal тип-строка (стандартный тип string) - последовательность символов произвольной длины (до 255 символов). Строку можно рассматривать как массив символов, однако в связи с широким использованием строк и некоторыми особенностями по сравнению со стандартными массивами они выделены в отдельный тип данных.

У типа-строки в квадратных скобках может быть указан его размер (от 1 до 255). Если размер строки не указан, он считается равным 255, например:

var

Str:string[80];

MaxStr:string; {строка в 255 символов}

const

Janary: string[10] = ‘Январь’;

Для строк применимы операции конкатенации (+) и сравнения.

Операция конкатенации добавляет к первой строке вторую.

Пример. Объединение двух строк.

var

Str, Str1, Str2:string[80];

begin

Str1:=’Turbo’;

Str2:=’Pascal’;

Str:= Str1+Str2; {в переменной Str - ‘Turbo Pascal’}

end.

Сравнивать можно строки разной длины. Сравнение осуществляется слева направо в соответствии с АSCII-кодами соответствующих символов. Считается, что отсутствующие символы в более короткой строке имеют код меньше кода любого действительного символа. Например, ‘ХЕ’ больше, чем ‘X’.

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

Program EХАМРLЕ;

const

Instance: аrrау[1..12] оf string[10] = ('ЯНВАРЬ', 'ФЕВРАЛЬ', 'МАРТ', 'АПРЕЛЬ', 'МАЙ', 'ИЮНЬ'. 'ИЮЛЬ', 'АВГУСТ' , 'СЕНТЯБРЬ' . 'ОКТЯБРЬ', 'НОЯБРЬ' , 'ДЕКАБРЬ');

Моnth: Вооlеаn = False;

var

Str: string[10];

i: Integer;

begin

WriteLn('Введите заглавные символы: ');

ReadLn(Str);

for i:=1 to 12 do

if Str = Instance[i] then Month:=True;

if Month then WriteLn ('Введено имя месяца')

else WriteLn ('Введено не имя месяца');

end.

Фактически строка N символов представляет собой массив из N+1 символа:

String[N] = аrrау[0..N] оf Char;

Нулевой символ предназначен для указания используемого количества символов строки и может изменяться от символа с кодом 0 до символа с кодом N. С ним можно работать как и с остальными символами строки (записывать и читать его значение и т. д.), но не забывая при этом о его основном предназначении.

6.3. Аsciiz-строка

В версии 7.0 для совместимости с другими языками программирования и средой Windows введен еще один вид строк -cтроки, оканчивающиеся нулевым байтом - символом с кодом 0 (т. н. АSCIIZ-строки). В отличие от строк типа string у этих строк не накладывается ограничение на их размер (фактически размер может быть до 65535 байтов). Этим строкам дан стандартный тип РСhar. Фактически этот тип является указателем на символ (об указателях см. п. 7):

Рсhar = ^Char;

Однако применение расширенного синтаксиса (ключ {Х+}) позволяет использовать такую переменную как строку, эквивалентную масиву типа

Pchar = аrrау[0..К] оf Сhar;

Где K количество символов в строке, не считая завершающего символа с кодом 0. В отличие от типа string символ с индексом 0 здесь является первым символом строки, а последний символ с индексом К - завершающим символом с кодом 0.

При работе с АSCIIZ-строками целесообразно задавать расширенный синтаксис; в этом случае не возникают трудности при использовании различных стандартных подпрограмм, работающих со строками.

Пример. Использование строк типа РСhar при расширенном синтаксисе.

рrоgram ЕХАMPLЕ;

{$Х+} {не обязательно - используется по умолчанию}

type

Т : аrrау[0..7] оf Char; {массив для строки из 7 символов}

var

Str: РСhar;

Const

А: Т = ‘привет!’#0;

Begin

Str := ‘ПРИВЕТ!’;

WriteLn(Str); {вывод строки: ПРИВЕТ!}

Str:=@A; {допустимо также: Str:=А}

WriteLn(Str); {вывод строки: привет!}

WriteLn(Str[1]); {вывод символа 'р'}

ReadLn;

еnd.

Если используется ключ {$Х-}, переменная типа РСhar в этом случае рассмат­ривается как указатель на один единственный символ. В этом случае ни один из операторов предыдущего примера, за исключением операторов Str:=@А; и ReadLn, недопустимы, а оператор WriteLn(Str^), выполненный после оператора Str:=@А;, выдаст один символ "п".

Для работы с АSСIIZ-строками в версии 7.0 используются специальные стан­дартные модули Strings и WinDos.