Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД-Паскаль-2012.docx
Скачиваний:
38
Добавлен:
01.05.2015
Размер:
561.45 Кб
Скачать

Действия с символами

Строку почти всегда можно рассматривать как массив символов, то есть обращаться из программы к отдельным символам строки: s1[1], s2[1], txt[1][10] (в последнем случае имеется в виду десятый символ первой строки). Нумерация символов в строке всегда начинается с 1. Однако присваивание отдельным элементам строки конкретных символьных значений может не привести к желаемому результату. Чтобы понять, почему это иногда происходит, необходимо рассмотреть принципы организации строковых переменных в памяти компьютера. Дело в том, что для хранения любой строки отводится ровно на 1 байт больше, чем указано при ее описании (256 байт для строк, размерность которых не указана явно). Причем этот вспомогательный байт располагается в самом начале строки, фактически это ее нулевой байт. В нем хранится текущая реальная длина строки. Собственно говоря, такой механизм и накладывает максимальные ограничения на возможную длину строк в языке Паскаль, так как максимальное число, представимое в одном байте, равно 255. Значение этого байта автоматически изменяется программой при выполнении стандартных операций над строками: считывании, присваивании строковой переменной строкового выражения, обращении к стандартным процедурам и функциям, работающим со строковыми выражениями. Рассмотрим на примере, как меняется содержимое памяти и реальное значение строки при выполнении тех или иных операций:

Операция

Содержимое памяти, выделенной строковой переменной s

Значение s

var s: string[6];

s[0]

s[1]

s[2]

s[3]

s[4]

s[5]

s[6]

s:=‘ ‘;

0

‘ ‘

s:=‘Yes’;

3

Y

e

s

‘Yes’

s[4]:=‘!’;

3

Y

e

s

!

‘Yes’

s:=s+’No’;

5

Y

e

s

N

o

‘YesNo’

s[4]:=‘!’;

5

Y

e

s

!

o

‘Yes!o’

На этом примере можно понять, что операция присваивания значения элементу строки, индекс которого превосходит текущую длину строки, не является корректной и фактически не оказывает влияния на результат. Поэтому применения подобных конструкций при программировании следует избегать, стараясь обходить стандартными операциями над строками. Рассмотрим их подробнее.

В отличие от массивов, над строковыми переменными определены операции считывания и печати. К строкам применима операция сложения. При сложении двух строк концу первой из них приписывается вторая (по-другому эту операцию называют конкатенацией строк).

Над строками между собой производится согласно так называемому лексикографическому порядку. Строка s1 считается меньше строки s2, если существует такая позиция k, что s1[1..k-1] = s2[1..k-1] и s1[k]<s2[k] или такой позиции не существует, но строка s1 короче строки s2. При операциях сравнения идет сравнение строк, начиная с левого края до первого несовпадающего символа. Например:

Пример. Покажем переменные, выражающие результат от строки ‘институт’.

В программе можно обратиться также и к определенному символу строки:

Строковые процедуры

Delete(st,poz,n) – удаление из строки st n символов, начиная с позиции poz.

Insert(st1,st2,poz) – вставка строки st1 в строку st2, начиная с позиции poz.

str(a,st) – преобразовывает число или переменную типа integer, byte, real в строку и помещает результат в переменную st.

val(‘17425’,x,cod) – преобразовывает переменную st строкового типа в переменную типа integer, byte, real.

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

Строковые функции

1. Copy(st,poz,n) – из строки st выделяется n символов, начиная с позиции poz.

2. Concat(st1,st2,…,stN) – дает новую строку, состоящую с st1 до stN строк, соединенных («сцепленных») в одну, для выполнения той же функции можно использовать знак «+».

3. Length(st) – длина строки st.

4. Pos(st1,st2) – обнаруживает первое появление в st2 подстроки st1.

5. UpCase(Ch) – преобразовывает строчную латинскую букву в прописную.