|
Строки
Тип STRING (строка) в
Турбо Паскале широко используется для обработки текстов.
Он во многом похож на одномерный массив символов ARRAY[O..N]
OF CHAR, однако, в отличие от последнего, количество
символов в строке-переменной может меняться от 0 до
N, где N - максимальное количество символов в строке.
Значение N определяется объявлением типа STRING [N]
и может быть любой константой порядкового типа, но не
больше 255 . Турбо Паскаль разрешает не указывать N,
в этом случае длина строки принимается максимально возможной,
а именно N=255 .
Строка в Турбо Паскале трактуется как цепочка символов.
К любому символу в строке можно обратиться точно так
же, как к элементу одномерного массива ARRAY [0..N]
OF CHAR, например:
var
st : String;
begin
.....
if st[5] = 'A' then...
end.
Самый первый байт в строке имеет индекс 0 и содержит
текущую длину строки, первый значащий символ строки
занимает второй байт и имеет индекс 1. Над длиной троки
можно осуществлять необходимые действия и таким способом
изменять длину. Например, удалить из строки все ведомые
пробелы можно следующим образом:
var
st : String;
i : Byte;
begin
i := ord(st [0] ) ; {i - текущая
длина строки}
while (i <> 0) and (st[i] = '
') do
begin
dec(i);
st[0] := chr(i)
end;
.....
end.
Значение ORD(st[0]) , т.е. текущую длину строки, можно
получить и с помощью функции LENGTH(st), например:
while (Length(st)<>0) and (st[Length(st)]='
') do
st[0] := chr(Length(st)-1)
К строкам можно применять операцию «+» - сцепление,
например:
st := 'а1 + 'b';
st := st + 'с'; {st содержит "abc"}
Если длина сцепленной строки превысит максимально допустимую
длину N, то «лишние» символы отбрасываются. Следующая
программа, например, напечатает символ 1:
var
st: String [1] ;
begin
St:='123';
WriteLn(st)
end.
Все остальные действия над строками и символами реализуются
с помощью описываемых ниже стандартных процедур и функций.
CONCAT(S1 [,S2, ... , SN] ) - функция типа STRING;
возвращает строку, представляющую собой сцепление строк-параметров
SI, S2, ..., SN.
COPY(ST, INDEX, COUNT) - функция типа STRING;
копирует из строки ST COUNT символов, начиная с символа
с номером INDEX.
DELETE (ST, INDEX, COUNT) - процедура; удаляет
СОUNT символов из строки ST, начиная с символа с номером
INDEX.
INSERT (SUBST, ST, INDEX) - процедура; вставляет
подстроку SUBST в строку ST, начиная с символа с номером
INDEX.
LENGTH (ST) - функция типа INTEGER; возвращает
длину строки ST.
POS (SUBST, ST) - функция типа INTEGER; отыскивает
в строке STпервое вхождение подстроки SUBST и возвращает
номер позиции, с которой она начинается; если подстрока
не найдена, возвращается ноль.
STR(X [; WIDTH [: DECIMALS] ], ST) - процедура;
преобразует число X любого вещественного или целого
типов в строку символов ST так, как это делает процедура
WRITELN перед выводом; параметры WIDTH и DECIMALS, если
они присутствуют, задают формат преобразования: WIDTH
определяет общую ширину поля, выделенного под соответствующее
символьное представление вещественного или целого числа
X, a DECIMALS - количество символов в дробной части
(этот параметр имеет смысл только в том случае, когда
Х- вещественное число).
VAL(ST, X, CODE) - процедура; преобразует строку
символов ST во внутреннее представление целой
или вещественной переменной X, которое определяется
типом этой переменной; параметр CODE содержит
ноль, если преобразование прошло успешно, и тогда в
X помещается результат преобразований, в противном
случае он содержит номер позиции в строке ST,
где обнаружен ошибочный символ, и в этом случае содержимое
Х не меняется; в строке ST могут быть
ведущие пробелы, однако ведомые пробелы недопустимы;
например, обращение val (' 123',k,i) пройдет успешно:
k получит значений 123, в i будет помещен
0, в то время как обращение val (' 123 ' , k, i) будет
ошибочным: значение k не изменится, a i
будет содержать 4.
UPCASE (СН) - функция типа CHAR; возвращает
для символьного выражения СН, которое должно
представлять собой строчную латинскую букву, соответствующую
заглавную букву; если значением СН является
любой другой символ (в том числе строчная буква русского
алфавита), функция возвращает его без преобразования.
Примеры:
var
х : Real;
у : Integer;
st,st1: String;
begin
st := concat('12','345'); {строка
st содержит 12345}
st1 := copy(st,3,Length(st)-2); {st1
содержит 345}
insert('-',st1,2); {строка st1 содержит
3-45}
delete(st,pos('2',at),3); {строка
st содержит 15}
str(pi:6:2,st); {строка st содержит
3.14}
val(''3,1415' ,x,y) ; {у содержит
2, х остался без изменения}
end.
Операции отношения =, о, >, <, >=, <= выполняются
над двумя строками посимвольно, слева направо с учетом
внутренней кодировки символов (см. табл.4.1 и прил.2).
Если одна строка меньше другой по длине, недостающие
символы короткой строки заменяются значением СНR(0)
.
Следующие операции отношения дадут значение TRUE:
'''' < ' . '
'А' > '1'
'Turbo' <' Turbo Pascal'
'Паскаль' >'Turbo Pascal'
|