Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОМП. НАУКИ_1сем.doc
Скачиваний:
6
Добавлен:
05.11.2018
Размер:
902.14 Кб
Скачать
      1. Стандартные функции и процедуры для строк

Стандартные подпрограммы позволяют:

  • узнать текущую длину строки;

  • установить новую длину строки;

  • объединить несколько строк в одну строку;

  • скопировать или удалить из строки часть строки, начиная с указанной позиции;

  • отыскать в строке заданную подстроку;

  • вставить в строку подстроку в указанную позицию;

  • преобразовать вещественное или целое число в строковое представление и обратно.

Функции и процедуры

Значение функции или результат вызова процедуры

function Concat(S1, S2 [,...,Sn]):string

Возвращает строку, полученную конкатенацией строк S1, S2, ... , Sn.

Равносильно выражению S1+ S2 + ... +Sn

function Copy(S,i,cnt):string

Возвращает подстроку строки S, начиная с позиции i, и состоящую из cnt символов , .

Например, S:=’Pascal’; Функция Copy(S,1,3) выдает строку 'Pas'.

Если i больше, чем длина S, функция возвращает пустую строку.

function Length(S):integer

Возвращает текущую длину строки S.

Например, S:=’Pascal’; Функция Length(S) выдает значение 6

Procedure SetLength(S,new)

Устанавливает длину, равную new, строки S (для строк типа ShortString это равносильно S[0]:=Chr(new)).

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

function Pos(subs,S):integer

Находит первое вхождение подстроки subs в строку S, возвращая номер позиции, где находится первый символ подстроки.

Если подстрока не найдена, функция возвращает 0.

Например, S:=’Pascal’. Функция Pos(‘a’, S) выдает значение 2

procedure Delete(S,i,cnt)

Удаляет из строки S, начиная с позиции i, подстроку из cnt символов. Здесь S – только строковая переменная, не константа.

Например, S:=’Pascal’; Процедура Delete(S,4,3) возвратит строку S=’Pas’, удалив 3 символа, начиная со 4-го.

Если i больше длины строки S, символы не удаляются.

Если количество удаляемых символовДля удаления «хвоста» строки указать позицию i первого его символа, а в качестве длины «хвоста» достаточно указать длину исходной строки, не подсчитывая длину «хвоста». Например, S:=’Object Pascal’; Процедура Delete(S,4,Length(S)) возвратит строку S=’Obj’, удалив 3 символа, начиная со 4-го.

procedure Insert(subs,S,i)

Вставляет подстроку subs в строку S, начиная с позиции i. Здесь subs – любое строковое выражение, S – строковая переменная.

Например, S:=’ac’; subs:='bbb'; Процедура Insert(subs,S,2) возвратит строку S=’abbbc’,

вставив подстроку 'bbb' в строку’ac’, начиная с позиции номер 2.

Полученная строка при необходимости усекается до объявленной длины переменной S.

Procedure Str(x[:width[:dec]],S)

Преобразует число x любого вещественного или целого типа в строковый формат (аналогично процедуре write).

Здесь x – любое числовое выражение, S – строковая переменная, width – общее количество знаков в числе x, dec – количество знаков после точки (указывается только для вещественных).

Например, x:=123.45; str(x:8:3,S); – строка-переменная S получит значение ' 123.450'

Procedure Val(S, x, code)

Преобразует строку символов S во внутреннее представление целого или вещественного x.

Здесь S – строковое выражение, x – числовая переменная, в которую помещается результат.

Целочисленная переменная code на выходе содержит либо 0 (если преобразование успешно),

либо номер позиции в строке S, начиная с которой произошла ошибка преобразования.

Например, S:=’123,45’; val(S,x,code) – Преобразование не произойдет. Параметр code получит значение 4, т.к. 4-ый символ – запятая, а не точка.

      1. Строковые выражения

Основной способ образования строки с нужным значением – построение и вычисление строкового выражения с последующим присваиванием полученного значения переменной-строке.

Операндами строкового выражения могут быть символьные и строковые константы и переменные (с индексами или без), а также символьные и строковые функции.

      1. Типичные задачи символьной обработки

Усечение строки

Текущая длина строки становится равной указанному числу:

SetLength(S, число)

S[0]:=Chr(число) {для строк типа ShortString}

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

ch:=’.’ {Заданный символ C, например, точка}

L:=80; {Заданная длина строки, например, 80}

for i:=1 to (L - Length(S)) do

S:=S+ch;

Подсчет количества вхождений заданного символа ch в строку S

k:=0; {k - счетчик} for i:=1 to Length(S) do if S[i]=ch then k:=k+1;

«Перевертывание» строки с использованием вспомогательной строки

X:=’’; {X – вспомогательная строка, изначально пустая} for i:=1 to Length(S) do X:=S[i]+X; S:=X;

Замена всех вхождений одного символа chA на другой символ chB

for i:=1 to Length(S) do if S[i]=chA

then S:=concat(copy(S,1,i-1),chB, copy(S,i+1,length(S)-i));

Удаление всех вхождений заданного символа chA

i:=1;

while i<=Length(S) do

if S[i]=chA

then Delete(S,i,1) {удаление одного символа}

else i:=i+1; {продвижение по строке}

Подсчет количества вхождений подстроки Subs в строку S

k:=0; {счетчик}

n:=Length(Subs);

i:=1;

while i<=Length(S) do

if Pos(Subs, Copy(S,i,n))) <>0

then begin k:=k+1; i:=i+n end

else i:=i+1;

Замена в строке S подстроки Sold на новую подстроку Snew с использованием вспомогательной строки

В строке X накапливаются части исходной строки S, не требующие замены, и фрагменты Snew, которые заменили фрагменты Sold. Из строки S обработанная часть строки удаляется вместе с найденным вхождением Sold.

X:=’’; {Вспомогательная строка сначала пустая}

n:=Length(S);

repeat

P:=Pos(Sold,S);

if P<>0 then

begin X:=X+Copy(S,1,P-1)+Snew;

Delete(S,1,P+n-1) end

until P=0;

S:=X+S; {К полученной строке X добавляем то, что осталось от S}