|
Тип динамических строк используется для обработки текстовой информации. Строка представляет собой цепочку символов. В программе строковая переменная может быть описана в блоках Type или Var. Например:
CONST N=16; {N£255}
TYPE stroka: string[100];
VAR st: string; {строка может содержать не более 255 символов}
str:string[10]; {строка может содержать не более 10 символов} st1:string[N]; {строка может содержать не более N=16 символов} st2:stroka; {строка может содержать не более 100 символов}
Максимальная длина строки - 255 символов. Строка имеет структуру, подобную одномерному массиву. Поэтому строка st1 трактуется как
st1:array[0..N] of char.
Отличие между строкой типа string и массивом состоит в том, что строка имеет переменную длину (количество символов) и нулевой элемент строки st[0] содержит информацию о длине строки. Длина строки может быть изменена: путем заполнения строки новым элементом или путем изменения ее нулевого элемента. Текущая длина строки может быть определена значением ORD(st[0]).
Строки можно присваивать и сравнивать. Операции >, <, =, >=, <=, <> выполняются посимвольно слева направо с учетом внутренней кодировки символов. Строки считаются одинаковыми, если они имеют одинаковую длину и одинаковые символы. Например:
'abcd'=abcd'
'abcd'<>'abcde'
'abcd'>' abc'
'abcd'<' ABC'.
К строкам применима операция сцепления (+), например:
st:= 'AB' + 'BC';
st:= st + 'CD'; {st содержит 'ABBCCD'}
Если количество символов превышает максимально допустимую длину, то "лишние" символы справа отбрасываются.
Отдельный элемент строки совместим с типом char. Пример:
Var
stt:string[2]; c:char;
Begin
stt:='123'; c:= 'a';
writeln(stt); {stt='12', излишек отсекается }
stt[2]:=c; {stt='1a' }
End.
Встроенные функции и процедуры для обработки строк
LENGTH (s:string):byte - выдает длину строки в символах.
Например, функция LENGTH(st), где St='ABBCCD' возвратит значение 6. CONCAT (s1,s2,...,sN:string):string - осуществляет сцепление строк. Например:
St:='1a'; S3:=Concat(St,'bc'); аналог S3:=St+'bc' S3='1abc'.
COPY (S:string; Start,Len:integer):string - выдает подстроку S длиной Len, начиная с символа с номером Start. Если Start >Length(S) (больше длины всей строки S), то функция вернет пустую строку; если Start>255, то возникает ошибка. Если Len больше, чем число символов от позиции Start до конца строки S, то вернется остаток строки S от Start до конца. Например, для выражения COPY('ABCDEF',2,3) результатом является строка 'BCD'.
DELETE (Var S:string; Start,Len:integer) - удаляет из строки S подстроку длиной Len, начиная с символа с номером Start.
После стирания подстроки ее оставшиеся части "склеиваются". Если Start=0 или превышает длину строки S, то строка не изменяется. Не изменит строку и значение Len=0. При Len большем, чем остаток строки, будет удалена подстрока от Start до конца S. Например, для
Delete('aбвгде',4,2) результат будет “абве”.
INSERT (Subs:string; Var S:string;index:integer) - вставляет в строку S подстроку Subs, начиная с символа с номеpом index;
Если измененная строка S оказывается слишком длинной, то она автоматически укорачивается до объявленной длины S (при этом всегда теряются символы справа). Например,
st:='abcdef';
Insert('-***-',st,4); {результат: St='abc-***-de' 0 }
POS (Subs,S:string):byte - отыскивает вхождение подстроки Subs в строке S и выдает номер позиции, с которой начинается это вхождение. Если строка s не содержит данной подстроки, то функция POS выдает 0. Если в строке s несколько одинаковых подстрок subs, то функция выдает только номер первого вхождения.
Для St='abcdef' результатом функций
POS('de',St) является значение 4,
POS('k',St) является значение 0.
Процедуры преобразования
STR (x[:w[:n]], Var s:string) преобразует числовое значение x в строковое s, x может быть переменной или выражением целого или вещественного типа. Для переменной x может быть указана ширина поля w, которое она занимает, а также n - количество знаков после десятичной точки. Параметры [:w[:n]] не обязательны. Если параметр n отсутствует для вещественного типа, то используется экспоненциальное представление. Если w больше, чем реальное количество знаков в числе, то производится выравнивание числа по правому краю. Для выравнивания по левому краю используется отрицательное значение w. Если в дробной части числа x знаков больше, чем указано в n, выполняется округление. Например:
str(6.66:8:1,s); {результат: S='6.7' c округлением}
str(6.66:-8:2,s); {результат: S='6.66'}
VAL (S:string,Var x,Var ErrCod) преобразует числовую строку S в числовую переменную x и формирует код ошибки ErrCod. Строка S не должна содержать незначащих пробелов, в том числе в начале и конце. ErrCod - целочисленная переменная. Она равна 0, если преобразование выполнено. В противном случае (если преобразование невозможно) эта функция выдает код символа, на котором прекратилось преобразование, значение x в этом случае неопределено. Если в строке S имеется десятичная точка или символ E, то переменная x должна быть определена вещественной.
Например, результат преобразования VAL(1324,x,Cod) есть x=1324,Cod=0;
FILLCHAR (Var X; k:word; Value) - процедура заполнения k последовательных байт переменной Х значением Value. Х - многобайтовая переменная. Процедура служит для заполнения участков памяти ОЗУ одним и тем же однобайтовым значением.
Дата добавления: 2015-09-05; просмотров: 69 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Служебные символы | | | Перечислимый тип |