36. Структуры данных. Строки.
Строки (STRING)
Данный тип служит для обработки текстов. ОН похож на одномерный массив символов ARRAY [0..N] OF CHAR, но в отличие от одномерного массива символов, количество символов в типе STRING может меняться от 0 до N, где N – максимальное количество символов в строке.
Описание (объявление) данного типа:
VAR
A: STRING [N]; N = 1..255;
B: STRING; (255-максимальное число символов)
Строка в TURBO PASKAL-e трактуется как цепочка символов. К любому символу можно обратиться точно также как к элементу одномерного массива.
ARRAY [0..N] OF CHAR;
A[1]; -обращение к символу строки.
B [2];
A [0]; -содержит текущую длину строки.
B [0];
A:= ‘ ПРИВЕТ’ -6 символов
А [0] -содержит 6 символов, в символьном виде, т.е. 6
А:=’ABC’
A [0] - 3
К строкам, так же как и к символам можно применить операцию сцепления (объединения):
VAR
A: STRING;
B: STRING [10];
….
A:= ‘ABC’ A:=A + ‘D’; (ДОБАВИЛИ D => ABCD)
B:= ‘KLM’;
A:=A+B;
WRITELN (A): ABCDKLM
Если длина полученной сцепленной строки превышает максимальную длину N, то лишние символы автоматически отбрасываются.
Действия над строками в основном реализуются с помощью стандартных процедур и ф-ций:
-
CONCAT (S1; S2; … ; SN) - данная ф-ция сцепляет строки
VAR
A, B, C: STRING;
…
A:=’ABC’;
B:=’DE’;
C:=CONCAT (А, В);
WRITELN (C); ABCDE
-
LENGTH (ST) – данная ф-ция возвращает текущую длину строки ST. Результат имеет тип INTEGER.
VAR
A:STRING;
I:INTEGER;
…
A:=’ABCDE’:
I:= LENGTH (A);
WRITE (I) 5
-
POS (SUBST, ST) - данная ф-ция служит для поиска от строки SUBST к строке ST. При э том данная ф-ция возвращает номер позиции первого вхождения от строки SUBST в строке ST. Если подстрока не найдена, то возвращается 0, тип результата INTEGER.
VAR
А, В: STRING;
I: INTEGER;
…
A:= ‘ABCDABCA’;
I:=POS (‘C’, А);
WRITE (I)3
B:= ‘AB’
I:=POS (B, A);
WRITE (I)1
I:=POS (‘KL’, А);
WRITE (I)0
-
UPCASE (A) - данная ф-ция служит для преобразования латинских символов (маленькие в большие). Результат типа CHAR, где А-переменная типа CHAR.
VAR
B, A: CHAR;
…
A:= ‘k’;
B:= UPCASE (A);
WRITE (B)K
B:= UPCASE (‘f’);
WRITE N(B)F
Если в качестве аргумента применяются заглавные латинские буквы или русские буквы, то данная ф-ция возвращает символ без изменения.
Над строками можно проводить операции сравнения, т.е. применять символы: =; ≠; >, <, =>, <=. При этом строки сравниваются посимвольно слева направо с учетом внутренней кодировки символов в кодовой таблице ASCII. Сравниваются не сами символы, а их десятичные коды.
Если одна строка по длине меньше другой, то недостающие символы короткой строки заменяются значениями (символами), которые имеют десятичный код 0 (CHR(0)). Сравнения проводятся до первого несовпадения.
VAR
A, B: STRING;
…
A:=’ABC’; B:=’ABCD’;
IF A>B THEN
WRITELN (‘A>B’);
ELSE
WRITELN (‘B>A’);’B>A’;
A:=’ABC’; B:=’ABK’;
IF A>B THEN
WRITELN (‘A>B’);
ELSE (иначе)
WRITELN (‘B>A’);B>A;
-
COPY (ST; INDEX; COUNT) –данная ф-ция копирует из строки ST COUNT-символов, начиная с позиции INDEX.
VAR
A, B: STRING;
…
A:=’ABCDKL’;
B:=COPY (A, 3, 2) (начиная с 3 позиции 2 символа)
WRITELN (B)CD
Процедуры над строками:
-
DELETE (ST; INDEX; COUNT) –данная процедура удаляет из строки ST COUNT-символов, начиная с позиции INDEX.
VAR
A: STRING;
A:= ‘ABCDEF’ (BCD хочу удалить)
DELETE (A, 2, 3) (начиная со 2 позиции 3 символа)
WRITELN (A)AEF
-
INSERT (SUBST, ST, INDEX) –данная ф-ция вставляет подстроку SUBST в строку ST, начиная с позиции INDEX.
VAR
B, A:STRING;
…
A:=’ABCD’;
B:=’KLM’;
INSERT (B, A, 2);
WRITELN (A)AKLMBCD
INSERT (‘FK’, A, 4);
WRITELN (A)AKLFKBCD.
-
STR (X [:ширина [:количество символов]]; ST) -данная процедура преобразует число Х любого вещественного или целого типов в строку ST.
Ширина – общая ширина поля вывода; Кол-во символов – кол-во символов в дробной части, указывается только для вещественных чисел.
VAR
A:=REAL;
B:=STRING;
…
A:= -58.62;
STR (A:7:2, B); (7-количество позиций)
WRITELN (B) -58.62
ТО, что указывается в [ ] не обязательно.
-
VAL (ST; X; CODE) -данная процедура преобразует строку символов ST во внутреннее представление целой или вещественной переменной Х, кот. определяется типом переменной Х. Параметр CODE явл-ся параметром целого типа, после выполнения данной процедуры в параметр CODE заносится: 0, если преобразование прошло успешно; число >0, если произошла ошибка преобразования. При этом число, занесенное в параметр CODE, определяет номер позиции в строке ST,в которой обнаружена ошибка.
В строке ST допускаются ведущие пробелы (перед числом), не допускаются ведомы пробелы (после числа).
VAR
A:STRING;
B:REAL;
C:INTEGER;
…
B:=0;
A:=-56.58;
VAL (A, B, C); ‘
WRITELN (B, ‘ ‘, C) -56.58 0
A:=’-56.58’;
VAL (A,B,C);
WRITELN (B, ‘ ‘, C)0 4;