Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Строки и функции и матрицы.doc
Скачиваний:
2
Добавлен:
15.11.2018
Размер:
264.19 Кб
Скачать

Операции со строками

    В ТП существуют два пути обработки переменных типа STRING. Первый путь предполагает обработку всей строки как единого целого, т.е. единого объекта. Второй путь рассматривает строку как составной объект, состоящий из отдельных символов, т.е. элементов типа CHAR, которые при обработке доступны каждый в отдельности. Так, первый путь предоставляет возможность присвоения строчной переменной за одну операцию значения целой строки символов:

Character_string_l := 'Это - строка !';

    Присваиваемое значение строки, так же как и отдельный символ типа CHAR, заключается в апострофы. Если апострофы опущены, то компилятор рассматривает приведенный фрагмент текста как числовую величину или как идентификатор.     Турбо Паскаль позволяет выполнять операции объединения (сцепления) нескольких строк в процессе их присваивания какой-либо переменной:

Character_string_l := 'Это' + ' -' + ' строка' + ' !';

    В результате такой операции в переменной Character_string_l будет то же самое содержимое, что и в предыдущем примере.     Второй подход обеспечивает доступ к отдельным символам строки по номеру их позиции:

Character_string_l[1] := 'А' ;

{Занести в качестве первого символа строки 'А'}

Character_string_l[5] := #49;

{Занести в качестве пятого символа строки '!'

(ASCII-код '!' соответствует числу 49)}

    Для доступа к отдельному символу в строке необходимо указать имя строки и в квадратных скобках номер позиции элемента (символа) в строке. При этом по отношению к отдельному символу строки возможны все те же операции, что и к переменной типа CHAR. В частности, возможны взаимные операции присвоения значений.

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

    ТП предоставляет в распоряжение пользователя целый ряд функций и процедур, предназначенных для обработки строк. В этом параграфе мы ознакомимся с наиболее важными из этих встроенных функций и процедур.

Функция Length

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

PROGRAM Demo_function_LENGTH;

VAR

Words: STRING;

BEGIN

Write ('Введите, пожалуйста, слово: ');

ReadLn (Words);

WriteLn;

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

END.

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

Функция UpCase

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

PROGRAM Demo_function_UPCASE;

VAR

Words: STRING;

i: BYTE;

BEGIN

Words := 'Фирма Microsoft';

FOR i := 1 TO Length (Words) DO

Words[i] := UpCase (Words[i]);

WriteLn(Words); {Выводится текст 'Фирма MICROSOFT'}

END.

    В результате работы этой программы на терминал выдается строка, содержащая большие английские и маленькие русские буквы.

Функция Copy

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

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

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

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

    Проиллюстрируем работу функции Сору на следующем примере:

PROGRAM Demo_function_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 Вы можете осуществить в некоторой строке поиск определенного фрагмента. Если заданный фрагмент в строке присутствует, то функция возвращает номер позиции в строке, с которой этот фрагмент начинается. Если фрагмент в строке не найден, то функция возвращает нуль.

PROGRAM Demo_function_POS;

VAR

Words: STRING[79];

Search_Word: STRING[20];

Position: BYTE;

PROCEDURE Search_stencil;

BEGIN

Position := Pos(Search_Word, Words);

IF Position <> 0 THEN

WriteLn ('Фрагмент "', Search_Word, '" содержится',' в слове "',

Words, '", начиная с позиции ', Position:3, '.')

ELSE

WriteLn ('Фрагмент "', Search_Word, "' не содержится ',

' в слове "', Words, '".');

END; {Search_stencil}

BEGIN

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

Search_Word := 'кац';

Search_stencil;

Search_Word := 'Кац';

Search_stencil;

END.

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

Фрагмент "кац" содержится в слове "Электрификация", начиная с позиции 10. Фрагмент "Кац" не содержится в слове "Электрификация".

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

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

    С помощью процедур Insert и Delete Вы можете: вставить фрагмент из одной строки в другую, удалить фрагмент из строки.     Процедура Insert вставляет в исходную строку, начиная с указанной позиции, какую-либо другую строку. Оператор Insert(Word1,Words,4); указывает ТП, что необходимо в строку Words, начиная с 4-ой позиции (перед 4-ой позицией), ВСТАВИТЬ строку Word1.     Процедура Delete удаляет в исходной строке фрагмент определенной длины, начинающийся с указанной позиции. Так, оператор Delete(Words,2,3); удаляет из строки Words фрагмент, состоящий из трех символов и начинающийся со второй позиции.     Проиллюстрируем возможности этих двух процедур на хорошо знакомом нам слове "компьютеризация".

PROGRAM Demo_function_insert_and_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 указанные в списке параметров позиции должны обязательно присутствовать в обрабатываемых строках.