Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

5.3 Строковые типы

Данные строкового типа - это последовательность символов переменной длины. Такой тип еще называют типом string. Он во многом похож на одномерный массив символов, однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N -максимальное количество символов в строке.

Описание строкового типа состоит из ключевого слова string, после которого в квадратных скобках указано максимальное количество символов строк» данного типа. Это количество может выражаться с помощью целой константы или имени целой константы. Если максимальный размер строки не указав, то он автоматически принимается равным 255 - максимально возможная длина строки. (Существуют еще ASCIIZ-строки, длина которых может достигать 65536 символов, но для работы с такими строками нужна особая директива компилятору). Длина переменной такого типа может динамически изменяться между 1 и значением константы. Символы в строке следует воспринимать как пронумерованные в интервале от 1 до значения константы.

Пример:

tyре

cities = string [20];

names = string [12].

Переменные типа cities - строкового типа, то есть строки символов, состоящие максимально из 20 символов. Переменные типа names максимально могут состоять из 12 символов. Переменные можно объявить следующим образом:

var

ci: array [1..20] of char;

na: array [1..12] of char.

В этом случае говорят, что ci и nа - символьные вектора. Символьные вектора можно рассматривать как строковые переменные, представляющие последовательности постоянной длины. Благодаря такой интерпретации имена cимвольных векторов и имена их элементов могут использоваться в строковых выражениях там, где могут использоваться имена строковых переменных.

Каждая величина строкового типа занимает в памяти на один байт больше, чем максимальное количество символов в строке данного типа. В дополни­тельном байте хранится информация о текущей длине строки. Если n - текущая длина строки, то в компоненте 0 помещается номер n последнего символа относительно начала строки.

Тип данных string предназначен для обработки строк. С данными типа string связан целый набор операций. Строки могут выводиться на экран монитора посредством стандартных процедур Write и Writeln и вводиться с помощью стандартных процедур Read и Readln. Следующая программа демонстрирует считывание строки.

program string_test;

Var s: string[10];

begin

writeln('Задайте несколько символов');

readln (s);

writeln(s,' длина:' , ord(s[0]):5);

end.

В этом примере при вводе можно записать сколько угодно символов, но с помощью readln(s) можно считать максимум 10 символов, так как по описанию переменная s может содержать максимум 10 символов. Прочие символы игнорируются. Считываемых символов может быть и меньше 10.

5.3.1 Операции над строками

Строки можно присваивать, сливать и сравнивать.

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

В Турбо Паскале существуют два пути обработки переменных типа string. Первый путь предполагает обработку всей строки как единого целого, то есть единого объекта. Второй путь рассматривает строку как составной объект, состоящий из отдельных символов, то есть элементов типа char, которые при обработке доступны каждый в отдельности. Так, первый путь предоставляет возможность присвоения строковой переменной за одну операцию значения целой строки символов:

str_1 := 'Это строка!'.

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

Второй подход обеспечивает доступ к отдельным символам строки по номеру их позиции:

str_1 [1] = 'Э'; str_1 [2] :='т'; sfr_1 [3] := 'о'; str_1 [4] :=' ';

Str_1 [5] = 'с'; str_1 [6] := 'т'; str_1 [7] := 'p'; str_1 [7] := 'о';

str_1 [8] = 'к';str_1 [9] := 'a'; str_1 [10] := '!'

Переменная str_1 приобретает то же самое значение, что и при первом подходе. Для доступа к отдельному символу в строке необходимо указать имя строки и в квадратных скобках номер позиции элемента (символа) в строке. При этом по отношению к отдельному символу строки возможны все те же операции, что и к переменной типа char. Необходимо напомнить, что, кроме классической записи символьной переменной в одинарных кавычках, Турбо Паскаль вводит еще две формы. Одна из них - представление символа его кодом ASCII с помощью специального префикса #, вторая, для управляющих символов, - значок " и буква алфавита с тем же номером (см. главу 1). При необходимости включения в строку управляющих кодов можно пользоваться "клавиатурными" обозначениями. В этом случае значение состоит как бы из склеенных кусков:

^G‘Пocлe сигнала нажмите '^J’ клавишу пробела '

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

Пример.

type

name = string [7]

var

fname, Iname : name;

begin

fname := 'Наталья';

Iname := 'Кучинская';

write (fname,' ',Iname)

end.

В результате выполнения программы будет выведено: Наталья Кучинск, так как максимальная длина строки 7. Согласно описанию

var a: string [5]; b: string [10];

можно присвоить значение b := а, хотя типы переменных различны. При присвоении а := b, в "а" запишутся только первые 5 символов строки "b".

Объединение двух строк в одну может быть осуществлено с помощью оператора конкатенации. Этот оператор записывается с помощью знака + (плюс). Объединенная строка представляет собой строку, состоящую из всех символов первой строки и следующих за ними всех символов второй строки. Например:

Выражение Результат

'adam' + 'eva' 'adameva'

'5' + '.' + '4' '5.4'

‘Это' + ' ' + 'строка' + '!' 'Это строка!'

Произвольные пары строк могут сравниваться с помощью операторов отношений. Две строки сравниваются посимвольно слева направо. При обнаружении первого несовпадающего символа принимается решение в соответствии с таблицей кодов ASCII. Отношение 'balkon' > 'balken' дает результат true, так как символ 'о' стоит в таблице кодов после символа 'е'. Отношение 'Pascal' = 'pascal' дает результат false, так как у прописной буквы код больше, чем у заглавной. Символ '+' стоит в таблице кодов перед символом '-', поэтому сравнение '+' < '-' дает в результате true.

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