Например, описав переменную: S: String [8] следующая операция



даст в результате S=«Мама мыл» и соответственно, потерю оставшихся символов.

Также, если в одной процедуре входные или выходные переменные отличались по своему числу символов от переменных в другой процедуре или функции, компилятор вернет ошибку и укажет на разность типов переменных. В таком случае нам потребуется, чтобы число декларированных в переменных символов совпадало и не превышало 255. Если последнее условие представляет затруднения, но представляет крайнюю необходимость, помогут методы обработки длинных строк.

Длинные строки

В Паскале возможна работа с длинными строками,24 длина которых определяется не числовым значением первого байта строки, а замыкающим символом «#0». Ограничение в них определяется лишь объемом оперативной памяти или ее схемой адресации. Максимально возможная строка в таком случае ограничена числом в 65 535 символов; еще такие строки называют ASCIIZ-строками.

Для создания длинных строк, перед описанием программы следует включить директиву расширенных значений компилятора {X+}; так же следует включить и модуль Strings.

Сама строка описывается типом Pchar, который является символьным указателем и отвечает за хранение массива символов Char.

На следующем примере показан вывод строки из массива 600 символов. Здесь LongS – длинная строка, S-массив символов. В данном случае массив S поочередно заполняется символами A и B в зависимости от нечетности (Odd=true) или четности значений счетчика цикла i.


Илл. 3. Пример обработки длинной строки в программе longstring.


Далее, производится операция присвоения значений массива S переменной LongS и ее последний символ помечается символом завершения строки «#0».

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

В модуле Strings описываются следующие операторы для обработки ASCIIZ-строк, но мы перечислим кратко основные из них, поскольку в обычной практике они нам не потребуются:

StrCopy (S1,S2): Pchar; – Копирует строку S2 в строку S1, возвращая указатель на S1.

StrLen (S1): Integer; – Возвращает длину строки.

StrCat (S1, S2): Pchar; – Объединяет строки S1 и S2, возвращая указатель на начало строки.

StrECopy (S1, S2): Pchar; – так же объединяет строки S1 и S2, но возвращает указатель на конец строки.

StrComp (S1, S2): Integer; – Сравнивает две строки и возвращает код 0 если строки равны, положительное значение если S1> S2 и отрицательное значение если S1 меньше S2.

StrlComp (S1,S2: Pchar; L: Word): Pchar; – так же сравнивает строки, но не более числа символов, указанного в L.

StrEnd (S): Pchar – Возвращает указатель на конец строки.

StrLCat (S1, S2: Pchar; L: Word): Pchar; – функция копирует строку S2 в конец строки S1 с учетом ограничения на количество символов L.

Пример работы с массивом символов S, как с длинными строками:


Илл. 4. Обработка массива S с помощью функций StrCopy и StrLen.


В данном случае, мы присваиваем массиву значение функцией StrCopy, а затем измеряем его длину с помощью StrLen и выводим на экран.


Илл. 5. Результат работы программы Longstring.


Из недостатков работы с длинными строками выделяются:

– относительно долгие операции конкатенации (объединения двух строк) и получения числового значения их длины;

– отсутствие контроля за концом строки, (что может вызывать потери данных и критические ошибки);

– невозможность использовать символ завершающего байта (#0) в качестве элемента строки;

– громоздкость синтаксиса.

По этим причинам и ввиду особой специфики работы, – большее внимание мы уделим операциям с обычными строками.