Листинг 5. Пример сравнения символьных срок
Program stparol;
Var
Name: string[30];
Parol: string [6];
Begin
Write (‘Пароль (6 символов)?’);
Readln (parol);
If parol=’секрет’ then begin
Write(‘Ваша фамилия?’);
Readln (name);
Writeln (name,’, Вам доступ разрешен. ‘);
End
Else begin
Writeln (Неверный пароль! Доступ запрещен!’);
End;
End.
Кроме операций сравнения к строковым переменным и константам можно применить оператор сложения, в результате выполнения которого получается новая строка. Например, в результате выполнения инструкции
First _name:=’Иванов’;
Last_name:=’Иван’;
Ful_name:=first_name+’ ‘+last name;
Значение переменой ful_name будет равно ‘Иванов Иван’.
Turbo Pascal 7.0 предоставляет несколько полезных при работе со строками функции и процедур. Ниже приведены их описания и примеры использования.
Функция LENGTH
Функция length возвращает длину строки. У функции один параметр-переменная строкового типа. Значение функции (целое число) - количество символов, из которых состоит строка. Например, в результате выполнения инструкций
N: =length (‘Иванов’)
M: =length (‘Невский проспект’)
Значения переменных n и m будут равны 6 и 18.
Следующая программа, ее текст приведен на листинге 6, использует функцию length для завершения цикла ввода информации с клавиатуры.
Листинг 6. Ввод символьного массива
Program instarr;
Const
N=35;
Var
Student: array [1..N] of string; {список – массив строк}
Name: string [30]; {введенная строка}
I: integer;
Begin
I: =1;
Repeat
Write (‘Введите фамилию или <Enter> для завершения- >’);
Readln (name);
If length (name)<>0
Then
Begin
Student [i]:=name;
I: =i+1;
End;
Until (length (name) =0) or (i=N);
{вывод введенного списка}
i:=1;
while (length (student[i])<>0) and (i<=N) do
begin
Writeln (student[i]);
I:=i+1;
End;
End.
Программа вводит список студентов. Цикл ввода завершается, если введен весь список (35 фамилий), или есть в ответ на запрос очередной фамилии пользователь нажмет клавишу <Enter> (в этом случае длина введенной строки равна нулю)
Процедура DELETE
Процедура delete позволяет удалить часть строки. В общем виде обращение к процедуре выглядит так:
Delete (Строка, p, n);
Где строка-переменная строкового типа; p- номер символа, с которого начинается удаляемая подстрока; n- длина удаляемой строки.
Например, в результате выполнения инструкции
S:=’Город Санкт -Петербург’;
Delete (s, 7, 6)
Значением переменной s будет строка ‘Город Петербург’
Функция POS
Функция pos позволяет определить положение подстроки в строке. В общем виде обращение к функции выглядит так:
Переменная pos (Подстрока, Строка);
Где подстрока –строковая константа или переменная, которую надо найти в стоковой константе или переменной Строка.
Например, в результате выполнения инструкции
P:=pos (‘Пе’,’Санкт –Петербург’);
Значение переменной p будет равно 7.
Если в строке нет искомой подстроки, то функция pos возвращает нуль. Следующая программа, е текст приведен на листинге 7,использует функцию pos и процедуру delete для удаления пробелов в начале введенной с клавиатуры строки.
Листинг 7. Удаление начальных пробелов строки
Program dledspa;
Var
St: string [30];
Begin
Write (‘Введите строку’);
Readln (st);
While (pos (‘ ‘,st)=1) and (length(st)>0) do
Delete (st,1, 1);
Write (‘Строка без начальных пробелов:’, st);
End.
Пробелы удаляются в цикле while до тех пор, пока функция pos обнаруживает пробел в начале строки (значение pos при этом равно еденице). Необходимость проверки условия length(st)>0 объясняется возможностью того, что введенная с клавиатуры строка состоит из пробелов. Вот пример работы программы:
Ведите строку: ул. Садовая
Строка без начальных пробелов: ул. Садовая
Функция COPY
Функция copy позволяет скопировать фрагмент строки. В общем виде обращение к функции copy выглядит так:
Переменная copy (Строка, p, n);
Где строка – переменная строкового типа, содержащая строку, фрагмент которого надо получить; p- номер первого символ в строке Строка, с которого начинается выделяемая подстрока; n- длина выделяемой строки.
Например, в результате выполнения инструкции
St: =’Инженер Иванов’;
Fam:= copy (st, 9,6);
Значением переменной fam будет строка ‘Иванов’.
Процедура VAL
Процедура VAL позволяет преобразовать изображение числа в число. В общем виде обращение к процедуре выглядит так:
Val (Строка, Число, Код);
Где строка - строковая константа или переменная, содержащая изображение числа; Число- переменная целого или дробного типа, которой должно быть присвоено значение, изображенное строкой Строка; Код- возвращаемый процедурой код ошибки (целое число). Если строка не может быть преобразована в число из-за того, что строка не является изображением числа, то значение Код будет равно номеру символа строки, которой явился причиной невозможности преобразования.
Например, в результате выполнения инструкции
Val (‘1,25’, n, code);
Значение переменной code равно 2, так как строк1,25 не является изображением числа, поскольку для отделения дробной части числа от целой используется точка, а не запятая.
Процедура val полезна при организации ввода с клавиатуры. Например, если в программе объявлена переменная moth (месяц) типа integer, и ее значение вводится с клавиатуры инструкцией read, то в результате возможной ошибки оператора, задавшего месяц строкой символов, например, ‘июнь’, а не цифрой, программа завершится ошибкой времени выполнения. Однако если числовые данные вводить как строку, а затем преобразовывать в число с помощью процедуры val, то можно избежать подобного неприятного завершения программы.
На листинге 8 приведен текст программ, которая выполняет проверку введенных данных при помощи процедуры val.