Слайд 1ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ
Типы для представления символьной информации
char - один
символ (из таблицы ASCII)
string - строка символов как целое.
С позиций обработки строка может рассматриваться также и как массив символов, индексированный числами 1, 2, 3, . . .
В отличие от массивов типа Array длина строки переменная и может быть нулевой (пустая строка) или иметь любое значение до max=255.
Фактическая длина строки определяется в момент ее инициализации.
Слайд 2Обработка информации типа CHAR
Запись констант:
‘d’ или #68 (#68 – номер 68 в таблице ASCII)
Объявление переменных:
var
sym : char;
arr : array[1..12] of char;
Операции:
6 операций отношения : <, <=, =, <>, >=<, >
chr(<число целое>) – символ из таблицы ASCII
ord(<символ>) – номер в таблице ASCII
ввод – read(<имя переменной типа char> )
readkey – читать код нажатой клавиши без эхо-печати
вывод – write(<символ>)
Для обработки массива (array) символов, можно использовать алгоритмы обработки массивов числовой информации, рассмотренные ранее.
Слайд 3Обработка строк
Строка - цепочка символов, ASCII--код каждого из которых располагается
в отдельном байте.
Длина строки - число символов в ней.
Максимальная длина - 255 символов, минимальная - 0 (пустая строка)
Запись констант:
’Это строка символов’ - (может содержать любой символ ASCII)
‘O’’key’ - (константа, изображающая слово «O’key»)
Варианты объявления переменной типа "строка":
var
city, s1, s2 : string; {строка произвольной длины}
name : string[20]; {строка, содержащая не более 20 символов}
Операции:
6 операций отношения : <, <=, =, <>, >=<, >
операция конкатенации : + (‘не’ + ‘удача’ = > ‘неудача‘)
ввод – read, readln (<переменная> )
вывод – write(<переменная или константа>)
Слайд 4Процедуры и функции для работы со строками
Длина строки –
число символов в ней
function Length(s:string):integer;
Выделить подстроку:
function Copy (S:string,NB,Len:integer):string;
Найти
подстроку в строке:
function Pos (SubStr,Str:string):integer;
Вставить подстроку в строку:
procedure Insert (SubStr:string;var Str:string; k:integer);
Здесь k - позиция c которой должна быть вставлена подстрока
Удалиь подстроку:
procedure Delete (var S:string;NBy,Len:integer)
Здесь NBy - позиция первого символа подстроки
Len - количество удаляемых символов
Преобразовать числовое значение (V) в строку:
procedure Str(V:<числовой тип>;S:string);
Здесь V может быть любого разрешенного в языке числового типа, как целого, так и вещественного.
Преобразование строки в числовое значение
Val(s:string; v: <числовой тип>; code:integer);
Здесь code – код завершения { 0 – успех; <>0 – неудача }
Слайд 5Иллюстрации
var
Name,FullName : string;
begin
FullName := 'John
Brown';
Name:=copy(FullName,6,2); {Результат : в переменной Name записано
'Br’}
FullName := 'John Brown';
P := Pos('Br',FullName); {Результат : P = 6}
Insert('Peter ', FullName,6); {Результат: 'John Peter Brown’}
Delete(FullName,3,2); {Результат: 'Jo Peter Brown'}
Str(25,S); {Результат: S=’25’}
x:=25e2;
Str(x:10:2,S); { Результат: ’ 2500.00’}
{ :10:2 – формат результирующей строки }
Слайд 6Пример 1. Удалить все пробелы в начале и конце строки
var
st:string;
begin
st:='
Иванов Сергей ';
{Удалить все пробелы в
начале строки}
while st[1]=' ' do {Первый символ строки - пробел}
st:=Copy(st, 2, Length(st)-1);
{end while}
writeln('<',st,'>');
{Удалить все пробелы в конце строки}
while st[Length(st)]=' ' do {Последний символ строки - пробел}
Delete(st, Length(st), 1);
{end while}
writeln('<',st,'>');
end.
{Результат первого цикла:
<Иванов Сергей > }
{ Результат второго цикла:
<Иванов Сергей> }
Слайд 7Пример 2. Подсчитать число вхождений символа «а» в строку
{ Использован
алгоритм А6 обработки массивов }
var
st : string;
I, k : integer;
begin
st
:= 'Исходная строка содержит несколько букв <а>';
k := 0;
for I := 1 to Length(st) do
if st[i]='а' then
k:=k+1;
{end if}
{end for}
{Результат : k = 3}
end.
Слайд 8Пример 2а. Подсчитать число вхождений символа «а» в строку (вариант
2)
{ Использована функция «pos» }
var
st:string; {Исходная строка}
stwork:string; {Рабочая переменная}
p:integer; {Позиция
первого вхождения символа в строку}
k:integer; {Количество найденных символов}
begin
st:='Исходная строка содержит несколько букв <а>';
k := 0;
stwork:=st;
p:=Pos('а',stwork);
while p>0 do begin
k:=k+1;
stwork:=Copy(stwork,p+1,255);
{Скопировано будет не 255 символов,
а оставшаяся часть строки, начиная с позиции
}
p:=Pos('а',stwork);
end;
{Результат : k=3 }
end.
Слайд 9Пример 3. Сформировать новую строку из исходной, оставив в ней
строго по одному пробелу между словами.
var
st:string; {Исходная
строка}
stnew:string; {Формируемая строка}
i:integer;
blank:boolean; { true – если пробел первый,
false – если пробел не первый }
begin
st:=' Иванов Сергей ';
blank:=false;
stnew := ''; {Строка пустая}
for i:=1 to Length(st) do
if st[i]<>' ' then begin
stnew:=stnew+st[i];
blank:=false;
end
else if (not blank) then begin
blank:=true; {первый пробел}
stnew:=stnew+st[i];
end;
{end for}
writeln('<',stnew,'>');
end. {Результат : < Иванов Сергей >}
Слайд 10Пример 4. Ввод строки вида "Фамилия число"
var
st :
string;
name : string;
number, p, code :
integer;
begin
writeLn('введите фамилию и возраст в одной строке');
write ('=> ');
readln (st);
p := Pos(' ', st);
name := Copy( st, 1, p-1); {сохранить фамилию}
Delete( st, 1, p);
while (st[1] = ' ') do
Delete(st, 1, 1);
{end}
while (st[Length(s)]=' ') do
Delete(st, Length(s), 1);
{end}
Val( st, number, code);
{если code = 0 переменной number присвоено значение
иначе число в строке записано в недопустимой форме}
'); readln (st); p := Pos(' ', st); name := Copy( st, 1, p-1); {сохранить фамилию} Delete( st, 1, p); while (st[1] = ' ') do Delete(st, 1, 1); {end} while (st[Length(s)]=' ') do Delete(st, Length(s), 1); {end} Val( st, number, code); {если code = 0 переменной number присвоено значение иначе число в строке записано в недопустимой форме}">
Слайд 11Дома:
Прочитать главу 8 из конспекта
Решить задачи 4, 5, 8
Текст задачи
8
Задана строка текста на русском языке.
Разделителями считать пробел, запятую, точку.
Напечатать
все слова, содержащие корень, введенный с клавиатуры.