Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНАЯ РАБОТА 8 2012.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
153.09 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №8

Обработка символьной информации

Строка. Множество.

Строковые типы Delphi

Строковы тип определяет множество символьных цепочек (последовательностей символов).

  1. Shortstring. Этот тип используется для объявления «короткой» строки.

Var

S:shortstring;

Переменной s выделяется память в объеме 256 байтов, из которых 255 байтов для значения строки, а один байт для хранения служебной информации.

Внутреннее представление переменной s: в нулевом байте хранится текущая длина строки в символьном формате, т.е. байт хранит символ, код которого равен количеству символов в строке; каждый байт, начиная с первого, используется для хранения самого строкового значения, при этом в одном байте хранится один символ;

  1. String[n]. В определении типа параметр n определяет количество допустимых символов в строке.

Var

S:string[100];

Переменной s выделяется память в объеме 101 байта. Внутреннее представление полностью соответствует внутреннему представлению переменных типа shortstring.

  1. String. Этот тип в Delphi используется для объявления длинной динамической строки. Максимальная длина строки 2Гб.

Var

S:string;

Переменная s является указателем на область памяти, в которой будет размещено строковое значение. Память переменной выделяется в размере: количество символов плюс один байт при выполнении следующих опреаций: при присваивании переменной значения; при вводе значения в переменную; с помощью процедуры setlength, используемой для массивов.

Внутреннее представление переменной s: последовательность байтов (строковое значение), за которым следует символ конца строки – символ с кодом нуль (терминальный нуль -#0).

  1. AnsiString.

Максимальная длина строки 2Гб. Строковое значение в переменной этого типа завершается терминальным нулем. Но представление в памяти отличается от переменной string. Переменная типа AnsiString является указателем на облаcть памяти, где будет располагаться значение. Соответственно, это динамическая строка и память ей будет выделяться на этапе выполнения. Представление в памяти: последовательность символов строкового значения, затем терминальный нуль и за ним специальная область из четырех байтов – счетчик ссылок. Счетчик ссылок позволяет экономить память, он указывает какое количество переменных ссылаются на это строковое значение. Например,

Var

s1, s2:ansistring;

Begin

s1:=Строковое значение ;

s2:=s1;

End.

В счетчике переменной s1 после присваивания значения было установлено значение один, после присваивания переменной s2 указателя s1, счетчик переменной s1 установился в значение два, т.е. две строки ссылаются на одно значение. Таким образом в памяти хранится один экземпляр строки, но на нее ссылаются две переменных.

Примечание. Строка и массив по внутренней организации похожи, но не идентичны. Строка в отличие от массива хранит дополнительную информацию: либо это длина строки, либо это символ конца строки.

Операции над значениями строкового типа

    1. Присваивания.

Знак операции присваивания :=.

Var

S, s1:string;

Sh:shortstring;

S5:string[5];

Begin

Sh:=’Что?’;

S5:=’Где?’;

S:=’Когда?’;

S1:=s

End.

    1. Конкатенация (сцепление) строк.

Знак операции конкатенации +.

S1:=sh+s5+s;

В результате операций в переменной s1 будет храниться строка: Что?Где?Когда?.

    1. Сравнение.

Равенство строк. Две строки равны, если их длины равны и они посимвольно равны. При посимвольном сравнении сравниваются коды элементов с одинаковыми индексами.

S:=’abc’; S1:=’abc’;

Неравенство строк. Строка s больше строки s1, если длина строки s больше строки s1. Например, S:=’abc’; S1:=’abcd’; т.е. строка S1 больше строки S.

Если строки имеют одинаковую длину, то больше та строка, у которой при посимвольном сравнении обнаружился символ с большим кодом. Например, S:=’adc’; S1:=’abc’; т.е. строка S больше S1.

    1. Определение длины строки.

Эту операцию выполняет функция length(s), где s строковое значение. Результат функции значение целого типа – длина строки.

Var

S:string;

Begin

S:=’Что?Где?Когда’;

Writeln(‘В строке S ’, length(S), ‘ символов’);

End.

    1. Копирование части строки.

Эту операцию выполняет функция copy(s,index,count), где: s – строка, index – индекс элемента строки s, count – количество копируемых элементов. Функция копирует count символов строки s, начиная с элемента с индексом index.

Пример копирования части строки

S:=’Что?Где?Когда’;

S1:=copy(s,5,4); //в строке s1 значение Где?

S1:= copy(s,i+1, length(s)-1);

    1. Определение вхождения подстроки в строку.

Эту операцию выполняет функция pos(sub, s). Ее результатом будет индекс элемента, начиная с которого, подстрока sub полностью разместилась в строке s или 0, если подстрока sub не входит в строку s.

Пример использования операции

Var

S:string;

sub:shortstring;

Begin

S:=’Что?Где?Когда’;

sub:='Где?';

i:=pos(sub,S); //значение i=5

i:=pos('Почему?',S); //значение i=0

End.

    1. Удаление из строки подстроки.

Для выполнения этой операции в Delphi используется процедура Delete(s,index,count), которая из строки s удаляет count символов, начиная с символа в позиции index. Параметр s в вызове процедуры должн быть представлен переменной.

Пример использования процедуры. Удалить из заданного предложения первое слово. Слова в предложении отделяются пробелом.

Var

S:string;

sub:shortstring;

Begin

S:='Первое слово должно быть удалено';

Delete(s,1,pos(' ',s)-1);

Writeln(s); //в s теперь текст: слово должно быть удалено

End.

    1. Вставка строки в строку.

Для выполнения операции вставки в Delphi используется процедура Insert(sub,s,index), которая вставляет строку sub в позицию index строки s. После выполнения операции длина строки s увеличивается на длину строки sub. Параметр s в вызове процедуры должен быть представлен переменной.

Пример использования процедуры. Вставить слово «Последнее» в строку с текстом «слово должно быть удалено» перед первым словом.

Var

S:string;

sub:shortstring;

Begin

S:='слово должно быть удалено';

Insert('Последнее',s,1);

Writeln(s);

End.

    1. Преобразование числа, представленного в числовом формате в строковый формат.

Для преобразования целого числа в строковый формат используется функция inttostr(x), где параметр x любого целого типа. Результатом функции является значение строкового типа.

Пример использования функции. В текст «План специальности xxxxxx» вместо xxxxxx вставить код специальности, представленный как целое число.

Var

S:string;

sub:shortstring;

x:integer;

Begin

S:='План специальности xxxxxx';

Writeln('Введите код специальности');

Readln(x);

Delete(s,20,6);

Sub:=inttostr(x);

Insert(sub,s,20);

Writeln(s);

End.

Для преобразования дробного числа в строковый формат используется функция floattostr(x), где параметр x любого вещественного типа. Результатом функции является значение строкового типа.

    1. Преобразование числа, представленного в строковом формате в числовой формат.

Процедура Val(s,x,kod). Которая предназначена для преобразования строкового представления числа s в формат числовой переменной x. Параметр х может быть целого или вещественного типа. Параметр kod это переменная целого типа. Если преобразование выполнено успешно, то значение переменная kod равно нулю.

Функция strtoint(s). Параметр s строкового типа. Результатом функции является значение целого типа.

Функция strtofloat(s). Параметр s строкового типа. Результатом функции является значение вещественного типа.

Var

S:string;

X, kod:integer;

Y:float;

Begin

S:='123';

Val(s,x,kod); //kod=0

X:=strtoint(s);

S:='12.54';

Val(s,x,kod); //kod =3

Val(s,y,kod); //kod=0

Y:=strtofloat(s);

End.

    1. Операции ввода-вывода.

Для ввода строковых значений в Delphi используется процедуры Read и Readln.

1) Пример поэлементного заполнения строковой переменной.

Var

S:string;

Sh:shortstring;

S5:string[5];

i:integer;

Begin

//заполнение переменной типа shortstring

For i:=1 to 10 do

Read(sh[i]);

S[0]:=chr(10);

//заполнение переменной типа string[5]

For i:=1 to 10 do

Read(s5[i]);

S[0]:=chr(5);

//заполнение переменной типа string

setLength(s,10);

For i:=1 to 10 do

Read(s[i]);

End.

2) Пример ввода строкового значения как единой последовательности символов.

Var

S:string;

Sh:shortstring;

S5:string[5];

i:integer;

Begin

Readln(sh);

Readln(s5);

Readln(s)

End.

Для вывода строковых значений в Delphi используется процедуры write и writeln. Вывод строкового значения можно выполнить поэлементно или как единой последовательности символов.

Примеры вывода строковых значений.

Var

S:string;

i:integer;

Begin

Readln(s):

//Посимвольный вывод строки

For i:=1 to length(s) do writeln(s[i]);

//вывод строки как единой последовательности символов

Writeln(s)

End.