Лабораторная работа №8 обработка строк
В Pascal имеется два типа данных для работы с текстами:
сhar — литерный или символьный тип;
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.