Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 8(информатика).doc
Скачиваний:
12
Добавлен:
09.11.2019
Размер:
76.8 Кб
Скачать

Лабораторная работа №8 обработка строк

В Pascal имеется два типа данных для работы с текстами:

  1. сhar — литерный или символьный тип;

  2. string — строковый тип или просто строка.

Символьный тип

Значением переменных символьного типа char является один символ. Каждому символу соответствует код символа  целое число в диапазоне от 0 до 255. Из этого следует, что символьный тип является порядковым.

Над данными символьного типа определены следующие операции отношения: =, <>, <, >, <=, >=, вырабатывающие результат логического типа.

Для данных символьного типа определены следующие стандартные функции:

chr(x) — возвращает значение символа по его коду;

ord(ch) — возвращает код заданного символа ch;

pred(ch) — возвращает предыдущий символ;

succ(ch) — возвращает следующий символ;

upcase(ch) — преобразует строчную букву в заглавную. Обрабатывает буквы только латинского алфавита.

Пример:

ord('А')=65

chr(128)='Б'

pred('Б')='А'

succ('Г')='Д'

upcase('n')='N'

Строковый тип

Строка - это последовательность символов. Максимальное количество символов в строке (длина строки) может изменяться от 1 до 255. Переменную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе объявления переменных.

Пример: Вывод строки в перевернутом виде и по отдельным словам

var s:string;

i:integer;

begin

write('Введите строку');readln(s);

for i:=length(s) downto 1 do write(s[i]);

writeln;

for i:=1 to length(s)-1 do

if (s[i])=' ') and (s[i+1]<>' ') then writeln

else write(s[i]);

readln;

end.

Функции и команды обработки строк

Процедуры

Delete(Var S:String; N, М:Integer) Удаляет М символов из строки S, начиная с позиции N.

Insert(SubS: String; Var S:String; N:Integer) Вставляет подстроку SubS в строку S, начиная с позиции N.

Str(X:Integer; Var S:String) Возвращает представление числа Х в его символьной форме S.

Val(S:String; Var Х, Code: Integer) Возвращает представление символов строки S в ее числовой форме Х. Параметр Code содержит признак ошибки преобразования (если Code = (), ошибки нет).

Функции

Chr(X:Byte):Char Возвращает символ с заданным порядковым номером Х.

Concat(S1[, S2, ..., SN]) :String Выполняет сцепку (конкатенацию) последовательности строк.

Copy(S:String; N, М:Integer):String Возвращает подстроку из строки S, начиная с позиции N и длиной М символов.

Length(S: String):Byte Возвращает количество символов в строке S.

Ord(X:Char):LongInt Возвращает порядковый номер символа Х в таблице кодов символов.

Pos(SubS, S: String):Byte Возвращает номер позиции, начиная с которой в строке S располагается подстрока SubS (если значение функции равно нулю, то S не содержит SubS).

Пример. Определить, сколько раз в данной строке встречается символ «а».

Решение. Опишем функцию, которой будем передавать строку. Результат выполнения — целое число.

Function Q Ch (st: String): Byte;

Var i, k: Byte;

Begin

k:=0; (просматриваем все символы строки, их число равно длине строки, если очередной символ равен 'а', увеличиваем счетчик)

For i:=1 To Length(st) Do If st[i]='а' Then Inc(k);

Q_Ch:=k;

End;

Пример. Если длина строки нечетное число, то удалить среднюю букву.

Решение. Пусть k — это длина строки, если оно нечетное, то надо удалить средний символ, а его номер равен k Div 2+1.

Procedure Del (Var st: String);

Var k: Byte;

Begin

k:=Length(вц р

If k mod 2=1 then Delete (st, k Div 2+1, 1);

End;

Пример. Заменить все вхождения подстроки 'del' на 'Insert'.

Решение. Пока такая подстрока встречается, необходимо находить номер первого символа первой встречи, удалять в этом месте ' del ' и сюда вставлять ' Insert '.

Procedure Ins (Var st: String);

Var k: Byte;

Begin

While Pos('del',st)<>0 Do

Begin

k: =Pos { ' de 1 ', st);

Delete (st, k, Length ( 'del ' ) );

Insert ( ' Insert ', st, )с) у

End;

End;

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

Решение. Разобьем предложение на отдельные слова и каждое будем хранить как элемент массива.

Program Example ;

Const n=30;

Туре Myarray Str=Array[1..n] Of String;

Var А: Myarray Str;

str: String[255];

k: Byte;

Procedure Init (Var b: Myarray Str);

Var i: Integer;

Begin

k:=1; {пока не встретится пробел, формируем очередное слово k, прибавляя по одной букве)

For i:=1 То Length(str)-1 Do

If str[i]<>’ ‘ then b[k]:=b[k]+str[i]

Else

{если это не последний символ, то увеличиваем счетчик слов и начинаем формировать соответствующий элемент массива}

If i<>Length(str)-1 Then

Begin Inc(k); b[k]:='' End;

End;

Begin

Writeln('Введите предложение');

Readln{str);

Init (А) р

Writeln('Всего слов: ',k); {просматриваем все слова,если первый символ очередного слова есть 'а', то выводим его}

For i:=1 То k Do If A[i] [1]='а' Then Write (A[i], ' ');

Readln;

End.