Лабораторная работа №10.
Тема: Строки.
Цель: Освоить на практике новый тип данных – строка, научиться работать с текстом.
Теоретическая часть.
Понятие строки и размещение в памяти. Описание строки. Действия над строками. Операторы. Примеры программ. Определение. Строки – это структурируемый тип данных, представляющий собой последовательность из набора символов кодовой таблицы. Всего 255 символов. По устройству данный тип очень близок понятию массив.A: string[5]
5 | О | С | Е | Н | Ь |
- строка
B: array[1..5] of char
О | С | Е | Н | Ь |
- массив из символов
В отличие от массива первый (т. е. нулевой) байт памяти содержит информацию по количеству символов в строке. Поэтому, если строка описана длиной 10 символов, то любые символы введенные с терминала или добавляемые к строке после 10 будут игнорироваться.
I способType <название типа 1> = string[10];
![]()
<название типа 2> = string;
(до 255)
Var <идентификатор>:<название типа>;
II способ
Var <идентификатор>: string[ ];
зарезерв длина
Замечание. Если две строки А и В описаны одинаково, то разрешено присвоение A:=B. Однако сравнение двух строк разрешается посимвольно. Обращение к каждому символу в строке аналогично доступу к каждому элементу в массиве.
Var A:string;
A[1] – первый символ
A[2 – второй символ
…
A[i – I – ый символ
Действия над строками.a) Можно складывать, причем сложение строк неперестановочно: ![]()
. Сложение наз-ся конкатенация. Concat – равносильно сложению нескольких строк. Результат в 1 –ой строке concat(a1,a2,a3)
b) Присвоение
c) Разрешается сравнение строк, при этом учитывается номер каждого символа из кодовой таблицы.
Пример 'кот'<'котомка'
'котт' > 'кота'
'аа' < 'ааа'
'а' < 'я'
Все символы русского и латинского алфавитов имеют коды соответствующих их порядку, т. е. 'А' < 'В'
Разрешены процедуры и функции над строками.
1) Copy (st, p,n)
Из строки st копируется n символов в память, начиная с позиции p.
2) Delete (st, p,n)
Из строки st удаляется n символов, начиная с p.
3) Insert(st1,st2,p)
Вставить строку st1 в st2, начиная с позиции p.
4) Length (st)
Вычисляет длину строки st.
5) Pos (st1,st2)
Находит позицию первого появления строки st1 в строке st2.
6) Str(n, st)
Процедура перевода цел. Переменной n в строку st.
7) Val(st, n,m)
Процедура переводит содержимое строки st в целочисленную переменную n, причем m – номер ошибочного символа.
Составить программу, позволяющую сформировать массив из слов данного предложения. Подсчитать количество слов, начинающихся с буквы Т.uses crt;
var
s:string;
x:char;
n, i,m:byte;
mas:array[1..10] of string;
begin clrscr;
s:='Уж небо осенью дышало';
n:=length(s);m:=1; mas[m]:=' '; {Обнуление нового слова}
for i:=1 to n do
if s[i]=' ' then begin
m:=m+1;
mas[m]:=' ';
end
else mas[m]:=mas[m]+s[i];
n:=0;
for i:=1 to m do
begin
writeln(mas[i]);
if mas[i,1] in ['T','t'] then inc(n)
end;
writeln('Количество слов, начин-ся с c T=',n);
readln;
end.
Индивидуальное задание:
1) Записать все слова строки T в одномерный массив. Подсчитать количество слов, количество букв в которых нечетно.
uses crt;
const raz=[' ',',','.',';','-',':','!','?'];
var t:string;
mas:array[1..15] of string;
i, n,m:byte;
begin clrscr;
writeln('Vvedite stroku');
readln(t);
n:=length(t); m:=1;
mas[m]:='';
for i:=1 to n do
if t[i] in raz then begin
while(t[i] in raz) do inc(i);
inc(m);mas[m]:=t[i];
end
else mas[m]:=mas[m]+t[i];
writeln;
writeln;
writeln('Massiv:');
for i:=1 to m do writeln(mas[i],' ',length(mas[i]));
n:=0;
for i:=1 to m do
if odd(length(mas[i])) then inc(n);
writeln('Kol-vo netetn slov=',n);
readln;
end.
2) Ввести строку A: string с клавиатуры. Заменить все встретившиеся строчные буквы на такие же прописные и вывести строку А после изменения.
3) Написать программу, определяющую, сколько раз встретилось заданное слово в текстовом файле, длина строки в котором не превышает 80 символов. Текст не содержит переносов слов.


