Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты по инфе.docx
Скачиваний:
10
Добавлен:
18.04.2015
Размер:
344.74 Кб
Скачать

8 Вопрос § 24. Строковый тип данных

24.1. Строковые величины

Величина строкового типа представляет собой последовательность знаков расширенной таблицы кодов ASCII (строку знаков). Идентификатором типа является зарезервированное слово STRING. Объем памяти, занимаемый значением строкового типа, может составлять от 1 до 256 байт в зависимости от количества знаков в его составе.

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

Строковая константа обычно имеет вид последовательности произвольных символов таблицы ASCII, ограниченной апострофами. Примеры строковых констант: '123', '' (пустая строка), 'hello', 'A'. В словах, содержащих апостроф, этот знак записывается дважды, например, 'Мар''iна Горка'. Именованные константы описываются в разделе констант программы, например,

Const b='Класс 11я'; {строковая константа b}

Символы строки считаются пронумерованными по порядку слева направо, начиная с 1. Их общее количество называется длиной строки. Так, длина описанной выше константы b равна 9; порядковый номер символа 'К' равен 1, 'л' – 2, …, 'я' – 9; символу ' ' (пробел) соответствует номер 6. В нулевом порядковом номере («невидимый» знак строки) хранится длина строки (в данном случае, число 9). Объем занимаемой памяти конкретной строкой всегда на единицу больше количества знаков, из которых составлена строка. Например, строка 'Класс 11я' занимает в памяти 10 байт.

Длина пустой строки '' (она состоит из двух рядом стоящих апострофов) считается равной нулю.

Строковая константа должна быть записана без переносов. При этом ее длина на экране компьютера может занимать не более 127 знаков (включая ограничивающие апострофы).

Переменные строкового типа описываются в разделе переменных программы, например, Var Text, L : String ; Здесь описаны переменные Text и L строкового типа с ограничением длины 255 знаков.

* Под переменную типаSTRING отводится 256 байт. Для более коротких строк максимальную длину программист может задать самостоятельно. Например, согласно описанию Var A: String [7]; B: String; переменные A и B занимают в памяти соответственно 8 и 256 байт.

24.2. Операции со строковыми величинами

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

Сравнение строк реализуется через последовательное сравнение их соответствующих знаков: если очередной знак строки Х имеет больший код в таблице символов ASCII, чем соответствующий знак строки Y, считают, что X > Y. Если при этом строки имеют различную длину, недостающие знаки заполняются кодом 0. Например, '0' < '1' < '2', 'Fabel' < 'Fach' < 'Fest' < 'Feuer' < 'Feuer '. Результат операции сравнения – величина логического типа.

Операция

Результат

Операция

Результат

Операция

Результат

'123'<'13'

True

'12' > '2'

False

'mam'>'mab'

True

'abba'>='ab'

True

'car'<>'car '

True

'cat'<='c'

False

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

Операция конкатенации (объединения, склеивания) обозначается символом “+” и позволяет присоединить одну строку к другой. Так, операция X+Y приведет к присоединению строки Y к строке X (операнды склеиваются между собой строго в порядке записи). В качестве операндов могут использоваться как строковые, так и символьные данные. Длина полученной строки равна сумме длин строк-операндов и не может быть более 255 символов; последние лишние символы теряются.

Пример 1. При А='123', B='4'  A+B='1234', B+A='4123'.

Использование операции “+” позволяет избежать ограничения выводимой на экран компьютера длины строки (до 127 знаков). Для получения строки длиной до 255 знаков нужно записать нескольких более коротких строк, объединяя их с помощью операции “+”.

Символьные и строковые данные могут использоваться в составе оператора присваивания. Если при этом значение, присваиваемое строковой переменной, превышает возможности соответствующего типа, то лишняя часть значения теряется. Так, пусть переменная Y описана как Var Y: String[5] ;

В результате выполнения оператора присваивания Y:= 'HELLO, BABY!'; переменная Y получит значение 'HELLO'.

Пример 2. Пусть OC – оценка ученика по контрольной работе, X='контрольная', Y=' не', Z=' решена'. Тогда после выполнения команды:

If (OC>=5) and (OC<=10) Then RES:=X+Z Else RES:=X+Y+Z;

при OC=7, например, значение строки RES будет равно 'контрольная решена'; при ОС=3 RES='контрольная не решена'.

Символьные данные можно рассматривать как частный случай строковых данных. Поэтому строковые и символьные значения в составе оператора присваивания совместимы, однако в одностороннем порядке: там, где возможно использование строкового значения, там возможно использование и символьного. Так, например, строковой переменной можно присвоить значение типа Char (но не наоборот!).

Так как знаки строки считаются пронумерованными, можно обратиться к любому символу этой строки, указав в квадратных скобках после строковой переменной порядковый номер знака (индекс) в составе строки. Использование такой индексированной переменной позволяет читать и изменять отдельные знаки строки. Например, для Х='informatics': X[1]= 'i', X[5]= 'r', X[7]= 'a' (X[1], X[5], X[7] – индексные переменные):

Номер символа

1

2

3

4

5

6

7

8

9

10

11

Символы строки

i

n

f

oO

r

m

a

t

i

c

s

Примеры программ:

* 1. Индексная переменная имеет свойства символьного типа. В процессе выполнения программы при использовании индексированной переменнойX[i] происходит автоматический контроль тех знаков, индекс которых соответствует значению X[0], где хранится значение длины строки. Остальные знаки считаются доступными для индексирования, однако являются неопределенными, и операции над ними недопустимы. Например, пусть строка S описана как Var S : String [10]; В результате присваивания: S:='12+34'; «невидимый» знак строки укажет фактическую длину строки, равную 5. Обращение S[7] некорректно (результат не определен), S[15] ошибочно – ошибка 76.

2. Пусть Х='informatics'. При описании Var Х: String; значение индексной переменной X[20] не определено; для описания Var Х: String [5]; при попытке использования переменной Х[20] будет получена ошибка компиляции 76.

3. Пусть X='forma'. После выполнения присваивания X[2]:= 'i' строковая переменная X изменит свое значение и окажется равной 'firma'.

Пример 1. Простой диалог с пользователем: программа предлагает ввести имя и выводит приветствие, обращаясь к пользователю по имени

Program Privet_1;

Var T: String;

Begin

Write ('Как тебя зовут? ');

Readln (T);

Writeln ('Здравствуй, ', T, '! ');

End.

Пример 2. Выборочный диалог: программа предлагает ввести имя и выбрать пол (мужской, женский) и в зависимости от выбранного пола добавляет к приветствию обращение «дорогой» или «дорогая». При неверном выборе признака пола программа выводит сообщение «Не понял юмора». Для ввода признака пола используется символьная переменная P.

Program Privet_2;

Var T: String; P : Char;

Begin

Write ('Как тебя зовут? ');

Readln (T);

Writeln ('Кто ты: Юноша (m)');

Writeln (' Девушка (w)');

Readln (P);

Write ('Здравствуй, ');

If (P='m') or (P='M') Then

Writeln ('дорогой ', T, '! ')

Else if (P='w') or (P='W') Then

Writeln ('дорогая ', T, '! ')

Else Writeln ('Не понял юмора! ')

End.

* Выделенный цветом фрагмент можно записать с помощью оператора выбора: Case P Of

'm', 'M' : Writeln ('дорогой ', T, '! ') ;

'w', 'W' : Writeln ('дорогая ', T, '! ')

Else Writeln ('Не понял юмора! ')

End ;