TURBO PASCAL |
Новости
|
Строки,как они существуют, как их обрабатывают стандартно и как их обрабатывать эффективно Представление в памятиСтроки в Pascal'е представляются достаточно специфично, совсем не так, как в других языках программирования. Каждая строка описанная
S: String[N];
представляет собой массив из элементов типа Char размерности N+1 с диапазоном индексов [0..N]. Соответственно, каждая строка может обрабатываться как единое целое, так и поэлементно:
S:= 'qwerty'; {S = 'qwerty'}
S[1]:= '1'; {S = '1werty'} Из примера ясно, что первый символ строки индексируется числом 1. Это связано с тем, что первый элемент строки (с индексом 0) используется для хранения (текущей) длины строки. Значение этого элемента возвращается функцией
Другим способом получить доступ к длине любой строки (в том числе и для записи) является Byte(S[0]) (те, кто не совсем понимает могут получить дополнительную информацию здесь). Процедуры и функцииКак и над каждым стандартным типом Pascal'я, над строками определено некоторое множество операций.
Сравнение производится в соответствии с кодами ASCII: если (первые) одноиндексные символы строк равны, то сравниваются следующие. Результат сравнения равен результату сравнения кодов первых (различных) символов. Пробел тоже является символом ASCII, поэтому, если строки различаются лишь количеством последних пробелов, то та, у которой их больше доминирует ту, у которой их меньше. Строка, которая обладает большей длиной, однако, не всегда более короткая строка меньше более длинной ('Cd'>'Abc', так как 'C'>'A'). Кроме того, Pascal содержит следующие
встроенные процедуры и функции для работы
со строками.
Способ конкретного использования каждой из них желательно посмотреть в справочной системе. Как правило программистам не хватает встроенных функций Pascal'а, и они пишут некоторые свои (к примеру "удалить из одной строки другую или возвратить False, если удаления не произошло", etc.). Элементарные алгоритмы,или как обрабатывать строки быстрееСтоит сразу заметить, что экспериментально доказано: стандартные процедуры обработки строк работают меделннее, чем должны. Поэтому их применение следует ограничить только самыми необходимыми случаями. В частности, их можно переписать полностью. Рассмотрим наиболее часто встречающиеся операции со строками. Первая - уменьшение длины строки (удаление определенного количества символов из хвоста) должна делаться так:
Dec(S[0],N);
Удаление из хвоста строки всех символов, равных (не равных), скажем, пробелу - ' ' - примерно так
While S(Length(S[0])=' '
Удаление лидирующих символов, равных (не равных) тому же пробелу несколько сложнее, но тоже прозрачно
P:=1;
While (S[P]=' ') And (P<=Length(S)) Процедура Move, использованная в последнем примере имеет следующее описание
Применение для вышеуказанных целей стандартной Delete недопустимо в программе, претендующей на эффективность. Процедуру Move также удобно применить для написания своих вариантов Delete и Insert. Удаление из строки некоторых определенных символов можно производить с помощью алгоритма, приведенного здесь. Следует отметить, что использование Pascal-строк не приветствуется при создании программ, котрые будут выполнятся в многозадачных системах: такого рода строки не вписываются в ASCIIZ спецификацию, являющуюся стандартом де-факто. Обработка ASCIIZ-строк стала возможна в Pascal'е начиная с версии 7.0 с введением дополнительного стандартного типа
PChar = ^Char;
процедуры обработки таких строк содержатся в модуле Strings. Они довстаточно эффективны и их перекрытие вряд ли что-нибудь даст в смысле выигрыша в скорости |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |