- 152 -
'R' = 'R'
'r' > 'R' (код 114 > кода 82)
Операции сравнения записываются традиционным способом:
<, <=, =, >=, >, <>.
Каждый символ можно рассматривать как элемент множества Set of Char и применять к нему операцию проверки на включение in:
Var Ch : Char;
. . .
ch := 'a';
if Ch in ['a'..'z'] then . . .
К символьным значениям и переменным могут быть применены также функции, приведенные в табл. 8.1.
Таблица 8.1
Функция : Тип
| Назначение
|
Chr( X : Byte) : Char
| Возвращает символ ASCII - кода X
|
Ord( C:Char) : Byte
| Возвращает ASCII — код символа C
|
Pred( C : Char) : Char
| Выдает предшествующий C символ
|
Succ( C : Char) : Char
| Выдает последующий за С символ
|
UpCase(C : Char) : Char
| Переводит символы 'a'..'z' в верхний регистр 'A'..'Z'
|
Функции Succ и Pred хороши для последовательного перебора символов. Следует только помнить, что не определены значения Succ(#255) и Pred(#0).
Функция UpCase переводит в верхний регистр символы латинского алфавита, возвращая все остальные, в том числе и кириллицу, в исходном виде.
8.3. Операции над строками
Строки можно присваивать, сливать и сравнивать. Слияние строк записывается в естественном виде (рис. 8.3). Если сумма получается длиннее, чем описанная длина левой части оператора присваивания, излишек отсекается.
Сравнение строк происходит посимвольно, начиная от первого символа в строке. Строки равны, если имеют одинаковую длину и посимвольно эквивалентны:
- 153 -
| VAR
| > S1, S2, S3 : String;
| BEGIN
| > S1 := 'Вам ';
| > S2 := 'привет';
| > S3 := S1 + S2; { S3 = 'Вам привет' }
| > S3 := S3 + ' !'; { S3 = 'Вам привет !' }
| END.
Рис. 8.3
'abcd' = 'abcd' --> TRUE,
'abcd' <> 'abcde' --> TRUE,
'abcd' <> ' abcd' --> TRUE.
Если при посимвольном сравнении окажется, что один символ больше другого (его код больше), то строка, его содержащая, тоже считается большей. Остатки строк и их длины не играют роли. Любой символ всегда больше «пустого места»:
'abcd' > 'abcD' ( так как 'd'>'D' ),
>'abcd' > 'abc ' ( так как 'd'>' ' ),
'aBcd' < 'ab' ( так как 'B'<'b' ),
>' ' > '' ( так как #32 > '' )
.
Можно, конечно, использовать нестрогие отношения: >= и <=.
Для работы со строками реализовано большое количество процедур и функций (табл. 8.2):
Таблица 8.2
Процедуры и функции | Назначение |
РЕДАКТИРОВАНИЕ СТРОК |
Length(S:String) : Byte | Выдает текущую длину строки |
Concat(S1, S2,…,Sn) : String | Возвращает конкатенацию или слияние строк S1 … Sn |
Copy(S:String ; Start, Len : Integer) : String | Возвращает подстроку длиной Len, начинающуюся с позиции Start строки S |
Delete(Var S : String; Start, Len : Integer) | Удаляет из S подстроку длиной Len, начинающуюся с позиции Start строки S |