Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ АЛГОРИТМИЗАЦИИ.doc
Скачиваний:
188
Добавлен:
16.03.2015
Размер:
1.82 Mб
Скачать

10.2. Стандартные процедуры и функции для строк

Функция Length

Встроенная функция Length (длина) позволяет определить фактическую длину текстовой строки, хранящейся в указанной переменной (а не величину предельного размера строки, установленную при декларации).

Например,

Program Demo_Length;

Var

Words : string;

Begin

Write(‘Введите слово:’);

Readln (Words);

Writeln;

Writeln (‘Это слово состоит из ’, Length(Words) : 3, ‘ букв!’);

End.

Примечание. При подсчёте фактической длины строки, учитываются все входящие в неё символы, в том числе и пробелы.

Функция UpCase

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

Например, замена всех строчных букв в строке на прописные:

ProgramDemo_ UpCase;

Var

Words : string;

i : integer;

Begin

Words := ‘Фирма Microsoft’;

For I :=1 to Length(Words) do Words[i] := UpCase(Words[i]);

Writeln (Words); {Выводиться текст ‘Фирма MICROSORT’}

End.

Примечание. Русские литеры не могут обрабатываться этой функцией (см. Задача 2).

Функция Copy

Функция Copy позволяет копировать фрагмент некоторой строки из одной переменной в другую. Вызывая функцию Copy, необходимо указывать следующие параметры:

  • Имя строки, из которой должен извлекаться копируемый фрагмент;

  • Позицию в строке, начиная с которой будет копироваться фрагмент;

  • Число копируемых символов.

Пример,

ProgramDemo_Copy;

Var Words : string[79];

Word1, Word2, Word3 : string[20];

Begin

Words := ‘картографирование’;

WriteLn (Words);

Word1 := Copy(Words, 6, 4);

WriteLn (Word1); {на экран выводиться слово ‘граф’}

Word2 := Copy(Words, 2, 3);

WriteLn (Word2); { на экран выводиться слово ‘арт’}

Word3 := Copy(Words, 11, 3);

WriteLn (Word3); { на экран выводиться слово ‘ров’}

End.

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

Функция Pos

Функция Pos может осуществить в некоторой строке поиск определенного фрагмента. Если заданный фрагмент в строке присутствует, то функция возвращает номер позиции в строке, с которой этот фрагмент начинается. Если фрагмент не найден, то функция возвращает нуль.

Например,

ProgramDemo_Pos;

Var

Words : string[79];

Search_Word : string[20];

Position : byte;

ProcedureSearch_stencil;

Begin

Position := Pos (Search_Word, Words);

If Position <> 0 then

Writeln (‘Фрагмент ” ’, Search_Word, ‘ ” содержится в ’, ‘слове ” ’ Words, ‘ ”, начиная с позиции ’, Position : 3)

Else

Writeln(‘Фрагмент ” ’,Search_Word, ‘ ” не содержится в ’, ‘слове ” ’Words, ‘ ” .‘);

End;

Begin

Words := ‘Электрификация’;

Search_Word := ‘кац’;

Search_stencil;

Search_Word := ‘Кац’;

Search_stencil;

End.

Примечание. Функция Pos требует полного совпадения искомого фрагмента и фрагмента строки, в которой производиться поиск. Причём, большие и маленькие буквы считаются различными символами (“К” не идентично “к”).

Процедуры Insert и Delete

С помощью процедур Insert и Delete можем соответственно вставить фрагмент из одной строки в другую и удалить фрагмент из строки.

Процедура Insert в исходную строку, начиная с указанной позиции, вставляет какую-либо другую строку.

Например, оператор

Insert (Word1, Words, 4);

указывает, что необходимо в строку Words, начиная с 4-ой позиции (перед 4-ой позицией), вставить строку Word1.

Процедура Delete удаляет в исходной строке фрагмент определённой длины, начинающийся с указанной позиции.

Например, оператор

Delete (Words, 2, 3);

удаляет из строки Words фрагмент, состоящий из трёх символов и начинающийся со второй позиции.

Пример использования этих двух процедур на слове “компьютеризация”.

ProgramDemo_insert_delete;

Var

Words : string[79];

Word1 : string[20];

Begin

Writeln;

Words := ‘компьютеризация’;

Writeln (Words);

Delete (Words, 1,7);

Writeln (Words);

Delete (Words, 3, 2);

Writeln (Words);

Word1 := ‘Г’;

Insert (Word1, Words, 1);

Writeln (Words);

Word1 := ‘не’;

Insert (Word1, Words, 3);

Writeln(Words);

End.

В результате работы данной программы на экран будут выведены следующие строки:

компьютеризация

еризация

ерация

Герация

Генерация

Примечание. Во избежание ошибок при применении процедур Insert и Delete указанные в списке параметров позиции должны обязательно присутствовать в обрабатываемых строках.

Примечание. В ТП7.0 принята концепция жёсткой проверки соответствия типов. При этом строки, имеющие разную длину, считаются несовместимыми. Для ослабления жесткого контроля соответствия строковых типов применяют директиву компилятора $V (контроль длины строк). С помощью этой директивы можно указать компилятору, должен ли он проводить жёсткую проверку соответствия длин строк при передаче параметров в процедуры и функции или нет. Если поставить в тексте программы перед вызовом процедуры директиву {$V-}, то в качестве параметров, передаваемых в вызываемую процедуру, смогут фигурировать строки с длиной, отличающейся от декларированной в описании процедуры.

Например,

{$V-}

My_upcase(Words);

{$V+}

Вторая директива компилятору $V включает жёсткую проверку соответствия длин строк.

Процедура Val

Функция Val преобразует строковый аргумент в его численное значение.

В качестве первого параметра указывается переменная строкового типа, преобразованное значение которой заносится во вторую переменную целочисленного типа. В случае если преобразование прошло успешно, значение переменной code будет равно 0, в противном случае - код ошибки.

Например,

ProgramDemo_Val;

Var S : string;

A, code : integer;

begin

S := ‘1234’;

Val(s, a, code);

If code = 0 then WriteLn (‘Строковая переменная хранит число: ’, А : 3)

ElseWriteLn(‘Ошибка в преобразовании строкового значения в численное’);

End.

Функция Str

Функция Str преобразует численное значение аргумента в его строковое представление.

Например,

ProgramDemo_Str;

Var

S : string;

A : integer;

Begin

A := 1234;

S := Str (A);

WriteLn(‘Строковое значение равно ’,S);

End.