Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
теория.pdf
Скачиваний:
465
Добавлен:
11.05.2015
Размер:
1.15 Mб
Скачать

10.2.Строковые данные

Строка – это последовательность любых символов кода обмена информацией (в персональных компьютерах – это код ASCII).

Строка наряду со знаками алфавита языка Паскаль может содержать русские буквы.

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

Различают строковые константы и строковые переменные.

10.2.1. Строковые константы

Строковая константа – это последовательность любых символов, допускаемых для представления в компьютере, заключенная в апострофы.

Например, ‘TEKST’.

Правила записи строковых констант в программе:

1)Если в строке необходимо поместить апостроф, то его повторяют дважды. При подсчете длины строки два рядом стоящих апострофа считаются одним символом.

2)При подсчете длины строки учитываются пробелы.

Например,

‘ПРОГРАММА ‘‘ИНТЕГРАЛ’’’

Так должна быть написана строка ПРОГРАММА ‘ИНТЕГРАЛ’.

‘ЗНАК ‘‘+’’’

Так должна быть написана строка ЗНАК ‘+’.

3)Допускаются пустые символьные константы, т.е. константы, не содержащие ни одного символа.

‘’ – это пустая строка нулевой длины.

4)Паскаль разрешает вставлять в строку символов управляющие символы. Символ # с целой константой без знака (от 0 до 255) обозначает соответствующий этому значению символ в коде ASCII. Между # и целой константой не должно быть никаких разделителей. Если несколько управляющих символов входят в строковую константу, то между ними не должно быть разделителей.

Например,

‘TURBO’#13#10’TEKST’

184

Здесь #13#10 – это управляющие символы, осуществляющие переход к началу следующей строки.

#7#7’MAKE’#7#7

Здесь #7 – это управляющий символ «Звонок».

#13#10

Эта строковая константа состоит только из управляющих символов. Управляющие символы пишутся вне апострофа.

10.2.2. Строковые переменные

В языке Паскаль существует два способа задания строковых переменных.

1-ый способ задания строковых переменных.

Задает строковые переменные постоянной длины. Строковая переменная определяется как одномерный массив символов:

Array [1 .. N] Of Char

<Тип_индекса> может быть задан только с помощью типа диапазон, где N – длина строки (N ≥ 1), определяемая как целое число без знака.

При таком способе объявления строка обладает всеми свойствами

массивов.

Например, строковой переменной можно присвоить значение другой строковой переменной той же длины; возможно обращение к отдельным символам строковой переменной, используя индексные переменные.

Пример 10.13.

Работа со строковыми переменными постоянной длины. Использование свойств строки, аналогичных свойствам массивов.

---------------------------------------------------------

Type

{Одномерный массив символов (строка)}

Stroka = Array [1 .. 9] Of Char;

{Двумерный массив символов (одномерный массив строк)}

185

Stranitca = Array [1 .. 30] Of Stroka; Var

Stroka1, Stroka2: Stroka; Stranitca1, Stranitca2: Stranitca; I, K, J: 1..30;

X, Y: Boolean; Const

Literal = ‘Программа’; Begin

------------------------------------

{K этому моменту Stroka2 должна быть определена:}

Stroka1 := Stroka2;

{Одной строке может быть присвоено значение другой строки той же длины. Здесь К-ой строке страницы присваивается значение строки:}

Stranitca1[K] := Stroka2;

{Обращение к отдельным символам строковой переменной:}

Stroka1[I] := ‘A’; Stroka1[J] := Stroka2[I];

{J-ому символу I-ой строки страницы присваивается значение К-ого символа строки:}

Stranitca1[I, J] := Stroka1[K];

------------------------------------

Особенности строковых переменных по сравнению с массивами:

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

Пример 10.14.

Применительно к примеру 10.13 можно написать следующие операторы присваивания:

Stroka1 := Literal;

Stranitca[I] := Literal;

Stroka1 := ‘ПРОГРАММА’;

2) Над значениями строковых переменных одинаковой длины можно выполнять операции сравнения (=, <>, >, <, >=, <=). Сравнение производится посимвольно, начиная с левой стороны до первого несовпадающего символа.

186

Считается большей та строка, в которой первый несовпадающий символ имеет больший номер в коде обмена информацией (ASCII).

Пример 10.15.

Применительно к примеру 10.13 можно написать следующие операторы присваивания:

X := Stroka1 = Stroka2;

Если Stroka1 и Stroka2 равны, то X примет значение True, в противном случае – False.

Y := Stranitca[I] >= Stroka2;

I-ая строка страницы сравнивается со строкой (у них длины должны быть одинаковые).

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

2-ой способ задания строковых переменных.

Вторым способом задания строковых переменных является использование типа String. Формат задания данного типа представляет рисунок

10.5.

С помощью типа String определяются строки переменной длины. N после слова String (см. рисунок 10.5) определяет максимальную длину строки.

N должно иметь положительное целочисленное значение, не превышающее 255 (≥1).

Если N в определении опущено (по умолчанию), то считается, что максимальная длина строки равна 255 = 28 – 1.

<Задание_типа_String> ::=

String [ <N> ]

Рисунок 10.5 – Синтаксическая диаграмма задания типа String

187

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

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

Переменной типа String выделяется количество байтов памяти на единицу превышающее максимальную длину, указанную в определении типа. В левом байте (с номером 0) хранится текущая длина строки в двоичном коде.

Возможен доступ к отдельным символам строки типа String. При этом используются индексные переменные. Правила индексации аналогичны массиву символов с диапазоном индексов

1 .. <Текущая_длина_строки>.

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

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

Над данными типа String определены операции сравнения (=, <>, >, <, >=, <=) и операция конкатенации (сцепления). Операция конкатенации имеет более высокий приоритет, чем операции сравнения.

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

Операция сцепления обозначается символом +. При ее выполнении две строки соединяются в одну результирующую строку. Длина результирующей строки не должна превышать 255 символов.

Пример 10.16.

Работа со строками переменной длины.

188

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