Добрый день!
Пока на вопросы из прошлого выпуска,
пришло всего лишь 2 ответа, будем ждать....
А пока читайте очередной выпуск
рассылки.
Теория
Давайте подумаем, как мы можем
представить строки ? Нам известен тип
символов (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. Т.е. пробелы
допустимы перед числом, но не после
него!
Конечно это краткое описание не может
дать полног представления об функциях,
но увы времени на подготовку этого
выпуска совсем мало :(((( Поэтому наша
фирма предоставляет вам уникальную,
доселе невиданную возможность :) -
поэксперементировать с этими функциями.
Напишите программку, которая просто по
очереди вызывает функции для работы со
строками. Если возникнут вопросы -
пишите ibp7@yandex.ru
Так же над строкаи можно выполнять
операции сравнения (=, <> , >, <, >=,
<=). Но подробнее об этом в разделе
программа.
Программа
Сегодня мы напишем программу, которая
выведет на экран таблицу символов. В
этой таблице 256 символов. С некоторыми
символами вы уже знакомы - это буквы. Но
есть ещё большое количество символов -
так называемые символы псевдографики. С
их помощью можно например чертить
таблицы. Весь интерфейс BP организован с
помощью этих символов. Вот сегодня мы и
выведем их на экран!
Для этой цели можно было бы
использовать array [1..256] of char, но куда проще
написать это через строку!
Program Table;
var
st : string;
i : integer;
beginfor i := 0 to 255 dobegin
st [i] := chr (i);
write(st[i], #32)
end
end.
Итак как вы видите мы использовали
строку просто как массив, если вы
попытаетесь вывести её на экран (write (st)),
то ничего не выйдет. Почему ? Потому что
мы в цикле присваеваем всем символам
строки номер. А st[0] = 0 !!! А ведь в st[0] у нас
хранится длинна строки !
Я надеюсь, что все уже успели выучить,
что Паскаль - строго типизированный язык.
Поэтому что бы присвоить символу целое
значение, нам нужно его преобразовать к
символу. Это и делает функция chr !
Теперь мы познакомились с таблицей
символов. Обратите внимание, что руские
буквы идут не подряд. Вначале от 'а' до 'п'
потом 'р' до 'я' и ещё в конце идёт буква 'ё'
!
Вернемся к сравнению строк. Все
операции сравнения над двумя строками
выполняются по-символьно слева на право,
с учётом таблицы символов. Если одна
строка меньше другой, то короткая
дополняется 0-ым символом до нужной
длинны! Например следующие сравнения
будут истинны: