Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ОАиП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

3. Строковые встроенные функции

Тип данных String используется при обработке текстов, а это означает, что нам необходимо уметь:

  • копировать часть строки;

  • удалять часть строки;

  • вставлять подстроку (т. е. часть строки) в данную строку;

  • осуществлять поиск подстроки (т. е. часть строки) в данной строке.

Для реализации этих операций в Паскале сущест­вуют стандартные процедуры и функции (см. табл. 11).

Таблица 11

Функции и процедуры

Назначение

Length (Z: String): Integer;

Возвращает текущую длину строки Z

Concat (Zi, [Z2,..., Zn] : String) : String;

Возвращает слияние (конкатенацию) строк Z1, Z2 ,..., Zn

Copy (Z: String; Index: Integer; Count: Integer): String;

Возвращает подстроку строки Z длиной Count, начинающуюся с позиции Index.

Pos (Substr: String; Z: String): Byte;

Определяет первое вхождение подстро­ки Z в строку Substr и возвращает 0, если Z не содержит Substr или номер первого символа Substr в Z.

Insert (Source: String; Var Z : String;Index : Integer);

Вставляет в строку Z подстроку Source, начиная с позиции Index .

Delete (Var Z: String; Index: Integer; Count: Integer);

Удаляет из строки Z подстроку длиной Count, начинающуюся с позиции Index.

Str (N : [:Width[:Decimals]]; Var Z: String);

Преобразует числовое значение N в строковое Z. Возможно задание формата для N.

Val (Z; Var N; Var Code: Integ­er);

Преобразует строковое значение Z (строку цифр) в значение числовой пе­ременной N.

4. Примеры использования процедур и функций

Рассмотрим работу функций на конкретных примерах. Используются две процедуры, которые корректно удаляют и вставляют символы в строку. При удалении символов ос­тавшаяся часть строки подтягивается к началу, чтобы занять образовавшуюся после удаления «дырку». При вставке, на­оборот, строка раздвигается, чтобы вместить вставляемые символы.

Пример 3.

Надо удалить из строки St пять символов, начиная с 1-ой позиции.

St: = 'река Волга';

Delete (St, 1, 5);

В результате St = 'Волга '.

Пример 4.

Удалить все пробелы из начала строки st (пробелы в на­чале строки называются ведущими пробелами):

While st [1] = ‘ ’ Do Delete (st, 1,1);

Аналогичный фрагмент можно написать для удаления пробелов из конца строки (завершающих пробелов):

While St [Length (St)] = ‘ ‘ do Delete (St, Length (St), 1);

Пример 3.

Вставить подстроку S2 в строку S1, начиная с 16-ой по­зиции.

S1 : =' Я разрабатываю программы '; S2 : = 'хорошие ';

Insert (S2,S1, 16);

В результате S1 = ' Я разрабатываю хорошие программы '.

При вставке в начало и конец строки действие процеду­ры Insert аналогично выполнению операции конкатенации. Так, в примере со вставкой звездочек в конец строки можно заменить s : = s +' * ' на Insert (' * ', s , length ( s ) + 1).

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

Пример 4.

Определить длину строки 123456789.

n : = Length ('123456789');

Результат работы функции n = 9.

Пример 5.

Выделить из строки S1 пять символов, начиная с 1-ой позиции.

S1: = 'Turbo Pascal';

S2: = Copy (S1, 1, 5);

S3: = Copy (S1, 7, 3);

В результате получим S2 = ' Turbo ', S3 =' Pas '.

Пример 6.

Объединить три строки символов в строке S.

S : = Concat ('АА1', 'XX', 'Y');

В результате S =' AAXXY '.

Функция Concat выполняет те же действия, что и опера­ция конкатенации. Например, для приведенного случая то же самое можно было записать так:

s : = 'АА' + 'XX' + 'Y';

Пример 7.

Результат работы функции pos имеет целочисленный тип и равен номеру той позиции, в которой находится 1-ый сим­вол подстроки. Если в строке подстроки не найдено, резуль­тат равен нулю.

S1 : = 'Turbo Pascal';

nl: = Pos ('Pascal', S1);

n2 : = Pos ('паскаль', S1) ;

В результате nl = 7; n2 = 0 так как 'паскаль' и 'Turbo Pas­cal' — это разные строки.

Задача 1

Проверить, является ли введенная совокупность симво­лов именем месяца.

Program Lab 14_1;

Uses Crt;

Const inst: Array [1 .. 12] of String [ 10 ] = ('yanuar', 'febr', 'marz', 'april', 'may', 'juni', 'juli', 'august', 'sebtember', 'october', 'november', 'december');

Month: Boolean = False;

Var Str: String [10];

i: Integer;

Begin

ClrScr;

WriteLn ('Введите имя месяца');

ReadLn (Str);

For I: =1 To 12 Do

Begin

If Str = inst [i] Then Month = True;

If Month Then WriteLn('Введено имя месяца')

Else WriteLn('Heт имени месяца');

End;

End.

Задача 2

Определить количество гласных и согласных букв во вводимой строке.

Program Lab 14_2;

Uses Crt;

Const n = 30;

Var a: String [n];

p: String [7];

g, s, i, j, k: Integer;

BEGIN

ClrScr;

p: = 'aejiouy';

WriteLn (' Введите текст ');

k: = 0;

Repeat

k: = k+ 1;

Read (a[kj);

Until (k = n) Or (a[k] ='.');

WriteLn;

g: = 0; s:= 0;

For i: = 1 To k Do

For j: = 1 To 7 Do

If a[i] = p[j] Then g: = g+l;

s: = k - 1 - g;

WriteLn ('Гласных = ', g);

WriteLn (' Согласных =', s);

End.

Протокол работы программы: введите текст

aaeiidf

Гласных = 5

Согласных = 2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]