Строковый тип данных
Строка - это последовательность символов. Количество символов в строке (длина строки) может изменяться от 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 Все права принадлежат авторам размещенных материалов.
|