Здавалка
Главная | Обратная связь

Строковый тип данных



Строка - это последовательность символов. Количество символов в строке (длина строки) может изменяться от 0 до 255. Для определения данных строкового типа используется идентификатор string, за которым следует заключенное в квадратные скобки значение максимально допустимой длины строки

 

type T = string[N];

 

где T - имя типа; N - длина строки.

Например:

 

type ST = string[20];

var X:ST; Y:string[10]; Z:string;

Если длина не указана, имеется в виду 255.

Над строковыми данными допустимы операция сцепления (+) и операции отношения (=,<>,<,>).

Например:

 

X:='группа'+' ИТ98-2';

Z:=X+Y;

'ИВАНОВ'<'ПЕТРОВ'.

 

Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший код (номер). Результат сравнения имеет булевский тип и принимает значение true или false. В приведенном примере результат true.

Допускается смешение в одном выражении операндов строкового и символьного типа.

К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке. Например, выражение X[4] обеспечит доступ к четвертому символу переменной X. Запись X[0] дает доступ к нулевому байту, содержащему значение текущей длины строки.

Для обработки строковых данных используются стандартные процедуры и функции.

 

Процедуры

 

1) delete(S,POZ,N) - удаление N символов в строке S, начиная из позиции POZ.

'ЭВМ ЕС 1840' delete(S,7,5) 'ЭВМ ЕС' ;

2) insert(S1,S2,POZ) - вставка строки S1 в строку S2, начиная с позиции POZ.

S1:=' ЕС '; S2:='ЭВМ 1840';

insert(S1,S2,4) ;

Значение S2 станет равным 'ЭВМ ЕС 1840';

3) str(R,S) - преобразование числового значения величины R и помещение результата в строку S.

150.2 str(R:6,S) ' 150.2';

4) val(S,R,COD) - преобразование значения S в величину целочисленного или вещественного типа и помещение результата в R. Если во время операции преобразования ошибки не обнаружено, COD=0, если ошибка обнаружена, COD будет содержать номер позиции первого ошибочного символа, а значение R не определено.

 

'14.2E2' val(S,R,COD) 1420 COD=0;

'52.4A+2' val(S,R,COD) ? COD=5.

Функции

 

5) copy(S,POZ,N) - выделение из строки S подстроку длиной N символов, начиная с позиции POZ.

'ABCDEF' copy(S,2,3) 'BCD'

6) concat(S1,S2,...,SN) - сцепление строк S1,S2,...,SN в указанном порядке. Сумма символов не должна превышать 255.

concat('AA','XX',' YZ') 'AAXX YZ'

7) length(S) - вычисление длины в символах строки S. Результат имеет целочисленный тип.

'SYSTEM' length(S) 6;

8) pos(S1,S2) - обнаружение первого появление в строке S2 подстроки S1. Результат имеет целочисленный тип и равен номеру позиции первого символа подстроки S1. Если подстроки S1 не найдено, результат равен 0.

'ABCDEF' pos('DE',S2) 4

'ABCDEF' pos('Г',S2) 0

9) upcase(C) - преобразование строчной латинской буквы в прописную. Параметр и результат имеют литерный тип.

'n' upcase(C) 'N'

Примеры выполнения задания лабораторной работы

 

Пример 30. В заданной последовательности символов, предшествующих первому символу ! (восклицательный знак), заменить все символы + на *.

Программа имеет вид:

 

program pr30;

uses crt; var x:char;

BEGIN CLRSCR;

WRITELN('ВВЕДИ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ'); READ(X);

while x <> ‘!’ do begin

if x =’+’ then write(‘*’) else write(x);

read(x) end;

writeln;

x:=readkey

end.

 

Пример 31. В заданной последовательности символов, предшествующих первой точке, удалить все цифры и удвоить знаки + и *.

 

Программа имеет вид:

program pr31;

uses crt;

VAR C:CHAR;

BEGIN CLRSCR;

WRITELN('ВВЕДИ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ'); READ(С);

repeat

if (c=’+’) or (c=’*’) then write(c,c)

else if (c<’0’) or (c>’9’) then

WRITE(C); READ(C)

until c=’.’; writeln;

c:=readkey

end.

Пример 32. Дана последовательность символов х1, х2,...,хn. Выяснить, есть ли среди этих символов пара соседствующих букв МА.

Программа имеет вид:

 

program pr32;

uses crt;

label 1;

const n=30;

type mas=array[1..n] of char;

VAR X:MAS; I:INTEGER; C:CHAR;

BEGIN CLRSCR;

WRITELN('ВВЕДИ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ');

FOR I:=1 TO N DO READ(X[I]); WRITELN;

WRITELN('ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ:');

for i:=1 to n do write(x[i]); writeln;

for i:=1 to n-1 do

if (x[i]=’m’) and (x[i+1]=’a’) then

BEGIN

WRITELN('MA-Є'); GOTO 1

END;

WRITELN('MA-НЕТ');

1: c:=readkey

end.

 

Пример 33. Приведем текст программы простейшей лингвистической обработки строк, в котором к строковым данным применяются приведенные выше процедуры и функции.

program PR33;

uses crt;

var a,b,c:string[12];s:string[40];ch:char; N:integer;

begin clrscr;

a:='electronic'; b:='digit'; c:='machine';

ch:=copy(a,1,1); writeln(ch);

ch:=upcase(ch); writeln(ch);

s:=concat(a,b,c); writeln(s);

delete(s,1,1);writeln(s);

INSERT(CH,S,1); INSERT(' ',S,11); INSERT(' ',S,17);

WRITELN(S); N:=POS('А',S);

WRITELN('ПЕРВАЯ БУКВА "A" ПОЯВИЛАСЬ В ПОЗИЦИИ',N);

N:=LENGTH(S); WRITELN('ДЛИНА СТРОКИ=',N);

ch:=readkey

end.

 

Результатом работы программы будет:

ch - e

ch - E

s - elektronicdigitmachine

s - lektronicdigitmachine

s - Elektronic digit machine

Первая буква 'А' появилась в позиции 19

Длина строки = 24

Пример 34. Дан текст s. Определить количество слов в данном тексте.

 

Программа имеет вид:

program PR34;

uses crt;

var s:string; ch:char; I,N,K:integer;

begin clrscr;

READ(S);

S:=’ ’+S;

n:=length(s);

FOR I:=1 TO N-1 DO

IF (S[I]=’ ‘) AND (S[I+1]<>’ ‘) THEN K:=K+1;

WRITELN('В ДАННОМ ТЕКСТЕ ',K:3,' СЛОВ');

ch:=readkey

end.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.