Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чернов Шафеева.doc
Скачиваний:
47
Добавлен:
21.05.2015
Размер:
1.39 Mб
Скачать

2.8.4. Строковый тип

Тип динамических строк используется для обработки текстовой ин­формации. Строка представляет собой цепочку символов. В программе строковая переменная может быть описана в блоках 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.