Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(2011. 10. 22) КН (с. 126 - ).doc
Скачиваний:
15
Добавлен:
19.05.2015
Размер:
228.86 Кб
Скачать

7. Операции над данными строковых типов.

Одной из операций над данными строковых типов является операция сцепления строк или операция конкатенации. В качестве знака этой операции используется знак ”+”.

Пример 1.

PROCEDURE … ;

CONST

N = ’нос’;

R = ’рог’;

B = ’бараний’;

K = ’Кривой’;

T = ’Таганий’;

VAR

S: STRING;

BEGIN

S := N + ’о’ + R; // S = ’носорог’

S := B + ’ ’ +R; // S = ’бараний рог’

S := K + ’ ’ +R; // S = ’Кривой рог’

S := T + ’ ’ +R // S = ’Таганий рог’

END;

Над данными строковых типов определены также операции отношения

= , <> , < , > , <= , >= .

Пусть S1 и S2 – две строки необязательно одинаковой длины, и пусть L1 – длина строкиS1, а L2 – длина строкиS2.

Допустим, что L1 =L2. В этом случае

условие S1 = S2 справедливо тогда и только тогда, когда значение каждого из элементов строки S1 совпадает со значением соответствующего элемента строки S2;

условие S1 < S2 справедливо тогда и только тогда, когда значение какого-либо элемента строки S1 оказывается меньше значения соответствующего элемента строки S2, а значение каждого из предшествующих элементов строки S1 совпадает со значением соответствующего элемента строки S2;

условие S1 > S2 справедливо тогда и только тогда, когда S2 < S1.

Предположим, что L1 < L2. СимволамиST1 и ST2 обозначим следующие строки

S

L2 – L1

T1 = S1 + #0 … #0,

ST2 = S2.

Условие S1 < S2 справедливо тогда и только тогда, когда либо ST1 = ST2, либо ST1 < ST2;

условие S1 > S2 справедливо тогда и только тогда, когда ST1 > ST2;

условие S2 < S1 эквивалентно условию S1 > S2;

условие S2 > S1 эквивалентно условию S1 < S2.

Пусть L1 ≤ L2.

Условия

S1 <= S2,

S1 >= S2,

S1 <> S2

эквивалентны соответственно следующим условиям

(S1 < S2)OR(S1 = S2),

(S1 > S2)OR(S1 = S2),

NOT (S1 = S2).

Условия

S2 <= S1,

S2 >= S1,

S2 <> S1

эквивалентны соответственно следующим условиям

S1 >= S2,

S1 <= S2,

S1 <> S2.

Приведём примеры истинных условий

’AB’ = ’AB’,

’AB’ < ’AC’,

’AB’ < ’ABC’,

’AB’ < ’AB’#0,

’ABC’ < ’AC’,

’AC’ > ’ABC’.

8. Некоторые стандартные процедуры и функции, используемые при обработке строк.

Одной из стандартных процедур, используемых при обработке строк, является процедура DELETE. Заголовок процедуры имеет вид

PROCEDURE DELETE(VAR S:STRING; I, N: INTEGER);

Опишем действие этой процедуры. Пусть L– длина строки S, и пустьI≥ 1, аN ≥ 0. ПроцедураDELETE удаляет в строке S символы, находящиеся в позициях с номерамиI, I+1, … , min {I+N-1, L}.

Пример 1.

PROCEDURE … ;

VAR

S: STRING;

BEGIN

S := ’вечер’;

DELETE (S, 3, 1);

{S = ’веер’}

S := ’музыка’;

DELETE (S, 3, 2);

{S = ’мука’}

S := ’вечер’;

DELETE (S, 5, 1);

{S = ’вече’}

S := ’вечер’;

DELETE (S, 5, 2);

{S = ’вече’}

S := ’вечер’;

DELETE (S, 3, 0);

{S = ’вечер’}

DELETE (S, 6, 1)

{S = ’вечер’}

END;

Другая стандартная процедура – INSERT. Её заголовок имеет вид

PROCEDURE INSERT(S1:STRING; VAR S2: STRING; I: INTEGER);

Опишем действие процедуры. Пусть L2– длина строки S2, и пустьI≥ 1. ПроцедураINSERT вставляет строку S1 в строку S2 с позиции (строки S2), имеющей номер, равный min {I, L2+1}.

Пример 2.

PROCEDURE … ;

VAR

S1, S2: STRING;

BEGIN

S2 := ’веер’;

S1 := ’ч’;

INSERT (S1, S2, 3);

{S2 = ’вечер’}

S2 := ’веер’;

INSERT (’т’, S2, 3);

{S2 = ’ветер’}

S2 := ’веер’;

INSERT (’’, S2, 3);

{S2 = ’веер’}

S2 := ’ABC’;

INSERT (’DEF’, S2, 5)

{S2 = ’ABCDEF’}

END;

Рассмотрим стандартную функцию COPY. Её заголовок имеет вид

FUNCTIONCOPY(S:STRING; I, N: INTEGER): STRING;

Допустим, L– это длина строки S. И пусть I≥ 1, аN ≥ 0. В этом случае значением функцииCOPY является подстрока строки S, состоящая из символов, находящихся в позициях с номерамиI, I+1, … , min {I+N-1, L}.

Пример 3.

PROCEDURE … ;

VAR

S, T: STRING;

BEGIN

S := ’ABCD’;

T := COPY (S, 2, 2);

{S = ’ABCD’, T = ’BC’}

T := COPY (’ABCD’, 3, 2);

{T = ’CD’}

T := COPY (S, 2, 7);

{S = ’ABCD’, T = ’BCD’}

T := COPY (S, 2, 0);

{S = ’ABCD’, T = ’’}

T := COPY (S, 5, 1)

{S = ’ABCD’, T = ’’}

END;

Рассмотрим стандартную функцию POS. Заголовок этой функции имеет вид.

FUNCTIONPOS(S1,S2:STRING): INTEGER;

Допустим, S1 и S2 – непустые строки. Если при этом в строке S2 есть, по крайней мере, одно вхождение строки S1, значением функцииPOS является номер позиции строки S2, с которой в строке S2 располагается первое (слева) вхождение строки S1.

Пусть S1 и S2 – непустые строки.Еслипри этом в строкеS2 нет ни одного вхождения строки S1, значение функцииPOS равняется 0.

В случае, если, по крайней мере, одна из строк: S1 илиS2 – пустая, значение функцииPOS также равняется 0.

Пример 4.

PROCEDURE … ;

VAR

S1, S2: STRING;

I: BYTE;

BEGIN

S1 := ’AB’;

S2 := ’PQRABCDABPQR’;

I := POS (S1, S2); // I = 4

I := POS (’AB’, ’CBA’); // I = 0

I := POS (’’, ’AB’); // I = 0

I := POS (’AB’, ’’); // I = 0

I := POS (’’, ’’) // I = 0

END;

Рассмотрим стандартную функцию LENGTH. Заголовок этой функции имеет вид.

FUNCTIONLENGTH(S:STRING): INTEGER;

Функция возвращает значение длины строки S.

Например,

LENGTH (’ABC’) = 3,

LENGTH (’’) = 0.

Рассмотрим стандартную функцию CONCAT. Заголовок этой функции имеет вид.

FUNCTIONCONCAT(S1 [, S2, … , SN] :STRING): STRING;

Значением её является строка, равная S1 + S2 + … + SN.

Рассмотрим стандартные функции UPPERCASE, LOWERCASE, ANSIUPPERCASE и ANSILOWERCASE. Запишем их заголовки:

a) FUNCTION UPPERCASE(CONST S:STRING): STRING;

b) FUNCTION LOWERCASE(CONST S:STRING): STRING;

c) FUNCTION ANSIUPPERCASE(CONST S:STRING): STRING;

d) FUNCTION ANSILOWERCASE(CONST S:STRING): STRING;

Значением функции

a) UPPERCASE,

b) LOWERCASE,

c) ANSIUPPERCASE,

d) ANSILOWERCASE

является строка, получаемая из строки Sкак результат замены

a) строчных латинских букв соответствующими прописными,

b) прописных латинских букв соответствующими строчными,

c) строчных букв (как латинских, так и русских) соответствующими прописными,

d) прописных букв (как латинских, так и русских) соответствующими строчными

и тождественного преобразования всех остальных символов.

Пример 5.

PROCEDURE … ;

VAR

S, ST: STRING;

BEGIN

S := ’UVW uvw ЖЗЛ жзл 123’;

ST := UPPERCASE (S); // ST = ’UVW UVW ЖЗЛ жзл 123’

ST := LOWERCASE (S); // ST = ’uvw uvw ЖЗЛ жзл 123’

ST := ANSIUPPERCASE (S); // ST = ’UVW UVW ЖЗЛ ЖЗЛ 123’

ST := ANSILOWERCASE (S) // ST = ’uvw uvw жзл жзл 123’

END;