Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы программирование.doc
Скачиваний:
68
Добавлен:
18.03.2015
Размер:
1.19 Mб
Скачать

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

В Turbo Pascal тип-строка (стандартный тип string) - последовательность символов

произвольной длины (до 255 символов). Строку можно рассматривать как массив символов,

однако в связи с широким использованием строк и некоторыми особенностями по сравнению

со стандартными массивами они выделены в отдельный тип данных.

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

размер строки не указан, он считается равным 255, например:

var

Str: string[80];

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

const

January: string[10] = 'Январь';

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

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

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

Str, Strl, Str2:string[80];

begin

Strl := 'Turbo ';

Str2 := 'Pascal';

Str := Strl + Str2; {в переменной Str — 'Turbo Pascal'}

end.

Сравнивать можно строки разной длины. Сравнение осуществляется слева направо в

соответствии с ASCII-кодами соответствующих символов. Считается, что отсутствующие

символы в более короткой строке имеют код меньше кода любого действительного символа.

Например, 'XS' больше, чем 'X'.

Пример.

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

program EXAMPLE11;

const

Instance: array[l..12] of string!10]=

('ЯНВАРЬ', 'ФЕВРАЛЬ', 'МАРТ', 'АПРЕЛЬ', 'МАЙ', 'ИЮНЬ', 'ИЮЛЬ', 'АВГУСТ', 'СЕНТЯБРЬ',

'ОКТЯБРЬ', 'НОЯБРЬ', 'ДЕКАБРЬ');

Month: Boolean = 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] of Char.

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

может изменяться от символа с кодом 0 до символа с кодом N. С ним можно работать как и

с остальными символами строки (записывать и читать его значение и т. д.), но не забывая

о его основном предназначении.

6.3. Asciiz-строка

В версии 7.0 для совместимости с другими языками программирования и средой Windows введен

еще один вид строк - строки, оканчивающиеся нулевым байтом - символом с кодом 0

(т. н. ASCIIZ-строки). В отличие от строк типа string у этих строк не накладывается

ограничение на их размер (фактически размер может быть до 65535 байтов). Этим строкам

дан стандартный тип PChar. Фактически этот тип является указателем на символ (об указателях

см. п. 7):

PChar = ^Char;

Однако применение расширенного синтаксиса (ключ {Х+} - см. п. 17.7.1) позволяет

использовать такую переменную как строку, эквивалентную масиву типа

pChar = array[0..К] of Char,

где К - количество символов в строке, не считая завершающего символа с кодом 0.

В отличие от типа string символ с индексом 0 здесь является первым символом строки,

а последний символ с индексом К - завершающим символом с кодом 0.

При работе с ASCIIZ-строками целесообразно задавать расширенный синтаксис; в этом случае

не возникают трудности при использовании различных стандартных подпрограмм, работающих

со строками.

Пример.

Использование строк типа PChar при расширенном синтаксисе.

program EXAMPLE12;

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

type

Т = array[0..7] of Char; {массив для строки из 7 символов}

var

Str: PChar;

const

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

begin

Str := 'ПРИВЕТ!';

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

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

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

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

ReadLn

end.

Если используется ключ {$Х-}, переменная типа PChar в этом случае рассматривается

как указатель на один единственный символ. В этом случае ни один из операторов

предыдущего примера, за исключением операторов Str:=@A; и ReadLn, недопустимы, а

оператор WriteLn(Str^), выполненный после оператора Str:=@A;, выдаст один символ "п".

Для работы с ASCIIZ-строками в версии 7.0 используются специальные стандартные модули

Strings (см. п. 16.2) и WinDos (см. п. 16.6).