Лабораторная работа №10. Тема: Строки. Цель: Освоить на практике новый тип данных – строка, научиться работать с текстом. Теоретическая часть. 1. Понятие строки и размещение в памяти. 2. Описание строки. 3. Действия над строками. Операторы. 4. Примеры программ. 1. Определение. Строки – это структурируемый тип данных, представляющий собой последовательность из набора символов кодовой таблицы. Всего 255 символов. По устройству данный тип очень близок понятию массив. A: string[5] 5 О С Е Н Ь - строка B: array[1..5] of char О С Е Н Ь - массив из символов В отличие от массива первый (т.е. нулевой) байт памяти содержит информацию по количеству символов в строке. Поэтому, если строка описана длиной 10 символов, то любые символы введенные с терминала или добавляемые к строке после 10 будут игнорироваться. 2. I способ Type <название типа 1> = string[10]; Кол-во символов <название типа 2> = string; (до 255) Var <идентификатор>:<название типа>; II способ Var <идентификатор>: string[ ]; зарезерв длина Замечание. Если две строки А и В описаны одинаково, то разрешено присвоение A:=B. Однако сравнение двух строк разрешается посимвольно. Обращение к каждому символу в строке аналогично доступу к каждому элементу в массиве. Var A:string; A[1] – первый символ A[2 – второй символ … A[i – I – ый символ 3. Действия над строками. 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 – номер ошибочного символа. 4. Составить программу, позволяющую сформировать массив из слов данного предложения. Подсчитать количество слов, начинающихся с буквы Т. 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 символов. Текст не содержит переносов слов.