Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алг яз Лаб 4(I-ИСТ).doc
Скачиваний:
1
Добавлен:
14.11.2019
Размер:
195.58 Кб
Скачать

2.3. Строки

Для работы с символьной информацией принято использовать структуру данных – строка. Определение переменных типа «строка» содержит служебное слово string, за которым может следовать максимальная длина строки в квадратных скобках (целочисленная константа в диапазоне от 0 до 255).

Например:

Var a: string [14]; {Определение строки с именем a длиной 14 символов}

line: string; {Определение строки с именем line с максимально возможной длиной}

Объявление переменной line типа string подобно следующему объявлению:

Var line: array [0..255] of char;

Доступ к отдельным элементам строки (символам) выполняется с помощью индексации. В результате получается величина типа char, например: a[6] – обращение к шестому символу строки. Тип string и стандартный тип char совместимы, т.е. строки и символы могут употребляться в одних и тех же выражениях.

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

2.3.1. Подпрограммы для работы со строками

Для работы со строками типа string в Pascal используются следующие процедуры и функции, находящиеся в модуле System:

function Concat(s1 [, s2, …,sn]: string): string; выполняет конкатенацию (сцепление) последовательности строк;

function Copy(s: string; index, count: integer): string; возвращает копию подстроки с позиции index длиною count из заданной строки s;

procedure Delete(var s: string; index, count: integer); удаляет из строки подстроку начиная с позиции index длиною count;

procedure Insert(source: string; var s: string; index: integer); добавляет в строку s подстроку source на позицию index;

function Length(s: string): integer; возвращает текущую длину строки;

function Pos(substr, s: string): byte; производит поиск подстроки substr в строке s, если подстрока встречается, возвращается позиция ее начала;

procedure Str(x [: width [: decimals]]; var s: string); преобразует численное значение x в его строковое представление s;

procedure Val(s; var v; var code: integer); преобразует строковое значение s в его численное представление code.

Пример.

{Удаление переданного символа из строки}

Var s: string;

ch: char;

Function DelChars(_s: string; _ch: char): string;

Var i: byte;

Begin

For i:=1 To length(s) Do

if (_s[i]=_ch) then Delete(_s, i, 1);

DelChars:=_s;

End;

BEGIN

Writeln('Input string');

Readln(s);

Writeln('Input char');

Readln(ch);

Writeln(DelChars(s, ch));

END.

2.3.2. Работа со строками длиной более 255 символов

Помимо представления строки с помощью типа данных string, в языке Pascal существует и другой способ реализации строк с помощью типа данных PChar. Для работы со строками, представленными типом данных PChar, разработано множество процедур и функций, которые находятся в стандартном модуле String.

В отличие от переменной/константы объявленной типа string, где максимальное количество символов равно 255, переменная/константа типа PChar может содержать множество символов, ограниченное только размером памяти одного сегмента 65534 байтов. В конце строки PChar имеется признак конца строки, называемый «нуль-символ», он обозначается \0.

0

1

2

3

4

5

6

с

т

р

о

к

а

\0

Строки с завершающим нулем хранятся в памяти в виде символьных массивов с нулевой базой, то есть нижняя граница которых равна нулю.

Const Len=300;

Type TStr=array[0..Len] of Char;

Для работы со строками типа PChar используются следующие процедуры и функции:

function StrCat(Dest, Source: PChar): PChar; добавляет одну строку к концу другой строки и возвращает указатель на результирующую строку;

function StrComp(S1, S2: PChar): integer; сравнивает две строки S1 и S2. Если S1< S2, то результатом будет отрицательное число; если S1= S2, то результатом будет 0; если S1> S2, то результатом будет положительное число;

function StrCopy(Dest, Source: PChar): PChar; копирует значение одной строки в другую. Возвращает указатель на начало результирующей строки;

procedure StrDispose(S: PChar); уничтожает строку, распределенную ранее с помощью функции StrNew;

function StrECopy(Dest, Source: PChar): PChar; копирует значение одной строки в другую. Возвращает указатель на конец результирующей строки;

function StrEnd(S: PChar): PChar; возвращает указатель на завершающий строку нулевой символ;

function StrIComp(S1, S2: PChar): integer; сравнивает две строки аналогично StrComp без учета регистра символов;

function StrLCat(Dest, Source: PChar; MaxLen: Word): PChar; добавляет одну строку к концу другой строки аналогично StrCat с установленной максимальной длиной результирующей строки и возвращает указатель на результирующую строку;

function StrLComp(S1, S2: PChar; MaxLen: Word): integer; сравнивает две строки аналогично StrComp, учитывая только установленное количество символов;

function StrLCopy(Dest, Source: PChar; MaxLen: Word): PChar; копирует заданное число символов из Source в Dest аналогично StrCopy и возвращает указатель результирующей строки;

function StrLen(S: PChar): Word; возвращает длину строки;

function StrLIComp(S1, S2: PChar): integer; сравнивает две строки аналогично StrLIComp без учета регистра;

function StrLower(S: PChar): PChar; преобразовывает каждую букву строки в нижний регистр;

function StrMove(Dest, Source: PChar; Count: Word): PChar; копирует заданное количество символов из Source в Dest и возвращает указатель результирующей строки;

function StrNew(S: PChar); выделяет для строки память в динамической распределяемой области;

function StrPas(S: PChar): string; преобразовывает строку типа PChar в строку типа string;

function StrPCopy(Dest: PChar; Source: string): PChar; копирует значение строки string в строку типа PChar и возвращает указатель результирующей строки;

function StrPos(S1, S2: PChar): PChar; возвращает указатель на первое вхождение строки S2 в S1, если совпадения нет, то возвращается nil;

function StrRScan(S: PChar; Ch: char): PChar; возвращает указатель на последнее вхождение символа Ch в строку S, если совпадения нет, то возвращается nil;

function StrScan(S: PChar; Ch: char): PChar; возвращает указатель на первое вхождение символа Ch в строку S, если совпадения нет, то возвращается nil;

function StrUpper(S: PChar): PChar; преобразовывает каждую букву строки в верхний регистр.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]