Искусственный интеллект. Строки, контекст и волны на Паскале - страница 7



.

Сама строка описывается типом Pchar, который является символьным указателем и отвечает за хранение массива символов Char.

На следующем примере показан вывод строки из массива 600 символов. Здесь LongS – длинная строка, S-массив символов. В данном случае массив S поочередно заполняется символами A и B в зависимости от нечетности (Odd=true) или четности значений счетчика цикла i.


Илл. 3. Пример обработки длинной строки в программе longstring.


Далее, производится операция присвоения значений массива S переменной LongS и ее последний символ помечается символом завершения строки «#0».

Кроме того, мы можем и напрямую работать с массивами символов Char, как со строками.

В модуле Strings описываются следующие операторы для обработки ASCIIZ-строк, но мы перечислим кратко основные из них, поскольку в обычной практике они нам не потребуются:

StrCopy (S1,S2): Pchar; – Копирует строку S2 в строку S1, возвращая указатель на S1.

StrLen (S1): Integer; – Возвращает длину строки.

StrCat (S1, S2): Pchar; – Объединяет строки S1 и S2, возвращая указатель на начало строки.

StrECopy (S1, S2): Pchar; – так же объединяет строки S1 и S2, но возвращает указатель на конец строки.

StrComp (S1, S2): Integer; – Сравнивает две строки и возвращает код 0 если строки равны, положительное значение если S1> S2 и отрицательное значение если S1 меньше S2.

StrlComp (S1,S2: Pchar; L: Word): Pchar; – так же сравнивает строки, но не более числа символов, указанного в L.

StrEnd (S): Pchar – Возвращает указатель на конец строки.

StrLCat (S1, S2: Pchar; L: Word): Pchar; – функция копирует строку S2 в конец строки S1 с учетом ограничения на количество символов L.

Пример работы с массивом символов S, как с длинными строками:


Илл. 4. Обработка массива S с помощью функций StrCopy и StrLen.


В данном случае, мы присваиваем массиву значение функцией StrCopy, а затем измеряем его длину с помощью StrLen и выводим на экран.


Илл. 5. Результат работы программы Longstring.


Из недостатков работы с длинными строками выделяются:

– относительно долгие операции конкатенации (объединения двух строк) и получения числового значения их длины;

– отсутствие контроля за концом строки, (что может вызывать потери данных и критические ошибки);

– невозможность использовать символ завершающего байта (#0) в качестве элемента строки;

– громоздкость синтаксиса.

По этим причинам и ввиду особой специфики работы, – большее внимание мы уделим операциям с обычными строками.

Функция поиска

Одной из базовых функций работы с переменными строкового типа является функция поиска подстроки в строке POS (S,S2), указывающая на числовую позицию первого символа подстроки.

Например, в случае



– должна быть переменной целочисленного типа (Integer, Word или Longint) и в данном случае получит значение 6 – позицию подстроки «мыла» в строке.

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

Например, следующее выражение



вернет значение 2, хотя символ «а» встречается здесь несколько раз и верными могли быть также значения 4, 9 и 12.

Копирование

Если нам требуется получить фрагмент текста, являющегося частью строки, можно использовать функцию Copy (S,N1,N2); Здесь N1 определяет, с какого символа будет производиться копирование, а