Давайте подумаем, как мы можем представить строки ? Нам известен тип символов (char) поэтому строку вполне логично представить, как массив символов. Вот и в Паскале есть тип String, который очень похож на array [0 .. N] of char. N можно задать явно (объявить переменную String[N]) или вообще не задавать, тогда будет использоваться значение 255. К любому символу строки можно обратится точно так же как и к элементу массива. Давайте рассмотрим примерчик:
var
st : String;
begin
st := 'Turbo Pascal';
.....
Самый первый элемент строки st [0] - содержит длинну строки. Дальше идут символы строки. Для нашего примера st[0] = 12, st[1] = 'T', st[2] = 'u' и т.д. Длинну строки (в целых числах) можно получить двумя способами:
- функция LENGHT (STR) - возвращает длинну строки str
- Использовать ORD (st[0])
var
st : String;
i : integer;
....................
i := ord (st[0]); - в i длинна строки
.....................
i := lenght (st ); - в i длинна строки
...........
Если длинна строки будет больше N, то строка автоматически урежется до нужного размера! Например программа
var
st : String [10];
begin
st := 'Turbo Pascal';
writeLn (st)
end.
выведет на экран Turbo Pasc Вот так! Будте внимательны! К строкам можно применять операцию "сцепление" - "+". Например st := 'a' +'b', потом st = 'ab' для работы со строками в Паскале имеется мощный арсенал функций:
- CONCAT (S1, S2, ... , Sn) - получает переменное число параметров (как write). Возвращает строку, представляющую собой сцепление строк S1, S2, ..Sn.
- COPY (ST, INDEX, COUNT) - возвращает строку, содержащую COUNT символов строки ST, начиная с номера INDEX
- DELETE (ST, INDEX, COUNT) - удаляет COUNT символов из строки ST, начиная с символа под номером INDEX.
- INSERT (SUB, ST, INDEX) - вставляет строку SUB в строку ST, начиная с номера INDEX.
- LENGHT (ST) возвращает целое число (integer) - длинну строки ST
- POS (SUB, ST) - ищет строку SUB в строке ST (до первого нахождения) . Возвращает номер позиции с которой она начинается, если строка не найдена, то 0. Тип возращаемого значения - Integer
- STR (X, ST) - преобразует число Х (любого типа) в строку символов ST (из 123 получим '123'). Число Х может иметь формат. Подробнее об формате смотрите выпуск "Типы данных".
- VAL (ST, X, code) - перобразует строку ST в целую или вещественную переменную Х. code содержит 0, если преобразование прошло успешно. В противном случае - номер ошибочного символа. Например val (' 123', x, c) будет x = 123, с = 0. НО val ('123 ', x, c) - с = 4. Т.е. пробелы допустимы перед числом, но не после него!
Программа
Сегодня мы напишем программу, которая выведет на экран таблицу символов. В этой таблице 256 символов. С некоторыми символами вы уже знакомы - это буквы. Но есть ещё большое количество символов - так называемые символы псевдографики. С их помощью можно например чертить таблицы. Весь интерфейс BP организован с помощью этих символов. Вот сегодня мы и выведем их на экран! Для этой цели можно было бы использовать array [1..256] of char, но куда проще написать это через строку!
Program Table;
var
st : string;
i : integer;
begin
for i := 0 to 255 do
begin
st [i] := chr (i);
write(st[i], #32)
end
end.
Итак как вы видите мы использовали строку просто как массив, если вы попытаетесь вывести её на экран (write (st)), то ничего не выйдет. Почему ? Потому что мы в цикле присваеваем всем символам строки номер. А st[0] = 0 !!! А ведь в st[0] у нас хранится длинна строки ! Я надеюсь, что все уже успели выучить, что Паскаль - строго типизированный язык. Поэтому что бы присвоить символу целое значение, нам нужно его преобразовать к символу. Это и делает функция chr ! Теперь мы познакомились с таблицей символов. Обратите внимание, что руские буквы идут не подряд. Вначале от 'а' до 'п' потом 'р' до 'я' и ещё в конце идёт буква 'ё' ! Вернемся к сравнению строк. Все операции сравнения над двумя строками выполняются по-символьно слева на право, с учётом таблицы символов. Если одна строка меньше другой, то короткая дополняется 0-ым символом до нужной длинны! Например следующие сравнения будут истинны:
'A' > '1'
'a' > 'A'
'Turbo' < 'Turbo Pascal'
'Паскаль' > 'Pascal'

