
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; |