Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТК№8.doc
Скачиваний:
4
Добавлен:
06.12.2018
Размер:
96.77 Кб
Скачать

Индекс символа в строке

Можно работать не только с целой строкой, но и с отдельными ее символами. Выражение с:=s[3], присваивает переменной с (типа CHAR) третий символ строки s. Порядковый номер символа в строке называется индексом и записывается в квадратных скобках сразу после названия переменной (без пробела).

Ниже приведена программа, находящая заданный символ в заданной строке:

PROGRAM prog4;

VAR

s: STRING;

i: INTEGER;

BEGIN

write('Введите строку: '); readln(s);

write('Введите номер символа: '); readln(i);

writeln(i, '–й символ строки – ', s[i]);

END.

Окно ввода/вывода:

Введите строку: Вася

Введите номер символа: 3

3–й символ строки – с

Если указать индекс больше, чем длина строки, то может возникнуть ошибка [Разные реализации языка обрабатывают такую ситуацию по-разному], поэтому лучше не пытаться этого делать.

Длина строки

Можно узнать, сколько символов в данный момент находится в переменной типа STRING. Символ с индексом 0 имеет код, равный количеству символов в строке.Ниже приведена программа, определяющая длину строки в символах:

PROGRAM prog5;

VAR

s: STRING;

BEGIN

write('Введите строку: '); readln(s); writeln('Длина строки – ', ORD(s[0]), ' символов');

END.

Окно ввода/вывода:

Введите строку: Вася

Длина строки – 4 символов

Максимальная длина строки.

Обратите внимание, что, поскольку на запоминание символа тратится 1 байт, то длина строки не может превышать 255 символов, так как двоичное число больше, чем 255, в 1 байт (в том числе и в тот, который отводится под символ с индексом 0) не поместить.

Строка определенной длины.

Память под переменную типа STRING выделяется в размере 256 байт. Часто это приводит к неэкономному расходованию памяти. В языке Паскаль есть возможность ограничить длину строки. Под такую строку память отводится в том количестве, которое мы укажем в ее описании (плюс нулевой байт). Чтобы описать строку фиксированной длины, надо в описании после указания типа STRING добавить в квадратных скобках длину: VAR a: STRING[10];

Когда строке с фиксированной длиной пытаются присвоить значение с большим, чем ее длина, количеством символов, правая часть присваиваемого значения, не поместившаяся в строку, будет отсечена. Если же присвоить значение короче, чем переменная, то символы со старшими индексами (оставшиеся лишними) будут заполнены случайными символами.

Если попытаться присвоить переменной типа CHAR значение типа STRING, то переменная обретет значение первого символа строки.

Строковые выражения

Выражения, в которых операндами служат строковые данные, называются строковыми выражениями. Они состоят из строковых констант, переменных, указателей функ­ций и знаков операций. Над строковыми данными допустимы операция сцепления и операции отношения.

Операция сцепления (+) применяется для сцепления нескольких строк в одну результирующую строку.

Например:

Выражение 'А'+'Т'+' '+ '386' 'Турбо'+'Паскаль + '7.0'

Результат 'AT 386' Турбо Паскаль 7.0'

Следует учитывать, что в операциях сцепления длина результирующей строки не должна превышать 255.

Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строковых операндов и имеют приоритет более низкий, чем операция сцепления, т. е. вначале всегда выполняются все операции сцепления, если они присутствуют, и лишь потом реализуются операции отношения. Сравнение строк производится слева напра­во до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строковыми операндами всегда имеет булевский тип и принимает значение True, если выражение истинно, и False, если выражение ложно. Например:

Выражение 'MS-DOS'<'MS-Dos' 'programm' >'programm'

Результат True

True

Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки считают­ся равными, если они полностью совпадают по длине и содержат одни и те же сим­волы.

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).

Пример1.

Strl := 'Группа, учащихся';

Str2 := Strl + ' школы-лицея' ;

Fio := 'Бочаров А.А.';

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

Описание А Выражение Значение А

A: String[6] А := 'ГРУППА 1'; 'ГРУППА'

Допускается смешение в одном выражении операндов строкового и литерного типа. Если при этом литерной переменной присваивается значение строкового ти­па, длина строки должна быть равна единице, иначе возникает ошибка выполне­ния.

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

Например, выражения Str2[l+2] и Str2[6] обеспечат доступ к третьему('у') и шестому ('а') символам последнего значения переменной Str2 в приведенном выше примере (см. пример 1).

Запись Str2[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Значение нулевого байта не должно превышать 255, но нарушение этого правила не вызывает программного прерывания, так как директива компиля­тора R по умолчанию находится в пассивном состоянии {$R-}. Для обеспечения строгого контроля за диапазоном допустимых значений индекса следует перевести директиву R в активное состояние {$R+}. В этом случае компилятор активизирует дополнительные команды для проверки правильности диапазона. Обычно актив­ный режим R устанавливается на стадии отладки программ.

1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]