Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 9а.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
78.34 Кб
Скачать

4.3.3. Встроенные процедуры и функции обработки строк

В Турбо-Паскале имеется несколько стандартных процедур и функций, предназначенных для обработки строковых переменных. Приведем наиболее полезные из них:

Concat(S1[,S2,...,Sn]: string ): string - функция возвращает строку, полученную в результате сцепления строк S1, S2,...,Sn. (эквивалентна операции конкатенации); Copy(St : string; Index: integer; Count: integer): string - функция возвращает подстроку, выделенную из исходной строки St длиной Count символов, начиная с символа с номером Index; Delete(var St:string; Index, Count: integer) - процедура удаляет из строки St подстроку длиной Count символов, начиная с символа с номером Index исходной строки; Insert(Subst: string; var St: string; Index: integer) - процедура вставляет подстроку Subst в исходную строку St, начиная с символа с номером Index исходной строки; Pos(Subst,St: string): byte - функция отыскивает первое вхождение подстроки Subst в строке St и возвращает номер позиции, с которой она начинается; если вхождение не установлено, возвращается 0. Более подробный список стандартных процедур и функций Турбо-Паскаля приведен в [9].

В качестве примера обработки строковых переменных рассмотрим функцию определения первого вхождения строки Str2 в строку Str1, начиная с символа с номером N в строке Str1 (пример 34). Пример вызова функции: K = PosN(2, 'abcabc', 'ab'); Переменная K получит значение 4.

Пример 34

Исходные данные:

Str1, Str2, N

Результат:

PosN - номер символа строки Str1, с которого начинается вхождение строки Str2;

PosN = 0, если вхождение не установлено.

function PosN(N: integer; Str1,Str2: string): integer; {определение первого вхождения строки Str2 в строку Str1, начиная с номера N} var

I, J, K: integer; D1, D2: integer; {длины строк Str1, Str2} Fl: boolean; {флаг}

begin

D1 := Length(Str1); D2 := Length(Str2); PosN := 0; {инициализация} if ( D1 - N + 1 >= D2 ) and ( N > 0) then {вхождение возможно} begin

Fl := FALSE; I := N; K := D1-D2+1; while not Fl and ( I <= K) do {цикл просмотра возможных вхождений} begin

Fl := TRUE; J := 1; while Fl and (J <= D2) do {цикл проверки вхождения Str2 в Str1, начиная с I-го символа строки Sr1} begin

if Str2[J] <> Str1[I+J-1] then

Fl := FALSE;

J := J + 1;

end; I := I+1;

end; if Fl then

PosN := I-1

{если Fl = TRUE, то вхождение установлено}

end;

end;

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