- •4. Структурированные типы данных
- •4.1. Массивы
- •4.1.1. Задание массивов
- •4.1.2. Обработка массивов.
- •4.1.3. Операторы блока данных и чтения из блока данных в языке Бейсик
- •4.1.4. Типизированные константы в языке Паскаль
- •4.2. Символьный и строковый типы данных.
- •4.2.1. Описание символьного и строкового типа данных.
- •4.2.2. Операции над строками.
- •3. Принцип модульности.
- •3.1. Процедуры.
- •3.2. Функции.
- •3.3. Параметры-процедуры и параметры-функции. Процедурный тип.
- •3.4. Длинная арифметика.
- •4. Рекурсия.
- •4.1. Понятие рекурсии.
- •4.2. Формы рекурсий.
- •5. Модули в языке turbo pascal. Модуль пользователя.
- •5.1. Стандартные модули.
- •5.2. Модуль пользователя.
- •6. Обзор графических возможностей языков высшего уровня.
4.2.2. Операции над строками.
Для строк применимы операции конкатенации и сравнения.
Операция конкатенации или сцепления обозначается символом «+» и применяется к двум выражениям строкового типа (в языке Паскаль один из операндов или оба могут быть символьного типа). Результат использования операции конкатенации – выражение строкового типа, значение которого получается путем присоединения справа к символам значения первого выражения символов значения второго выражения.
Так описанные в предыдущем пункте переменные S в результате исполнения следующих операторов присваивания примут значение ЯМАЙКА.
QB: S=“Я“ +“МАЙКА“
TP: S=’Я’ +’МАЙКА’
Операции отношения позволяют сравнить значения двух выражений строкового типа. Сравнение значений производится посимвольно слева направо до первой пары несовпадающих символов в соответствии с ASCII-кодами соответствующих символов. Та строка считается больше, в которой первый несовпадающий символ имеет больший код в таблице символов.
Если сравниваются строки различной длины, но в общей части символы совпадают, считается, что более короткая строка меньше длинной, так как отсутствующие символы в ней имеют код меньше кода любого значащего символа, поскольку перед сравнением строк производится их выравнивание путем добавления к более короткой строке символов пробела.
Например, следующие значения выражения имеют значение TRUE:
‘РЫБАК’>’РЫБАЧОК’
‘РЫБАК’>’РЫБА’
Стандартные функции обработки строк |
||
QBasic |
Turbo Pascal |
Значение функции |
LEN(<выражение>) |
LENGTH(<выражение>) |
Длина значения <выражения> строкового типа |
MID$(<выражение>, <выражение1>, <выражение2>) |
COPY(<выражение>, <выражение1>, <выражение2>) |
Последовательность символов значения <выражения> строкового типа, начиная с позиции, задаваемой значением <выражения1>, в количестве, задаваемом значением <выражения2>. Значения <выражения1> и <выражения2> – натуральные числа не более 255 |
INSTR(<выражение1>, <выражение3>, <выражение>) |
– |
Номер позиции первого символа вхождения значения <выражения> строкового типа в значение <выражения3> строкового типа начиная с позиции, задаваемой натуральным (не более 255) значением <выражения1>. Если значение <выражения> начиная с указанной позиции не содержится в значении <выражения3>, то значение функции равно нулю. |
– |
POS(<выражение>, <выражение3>) |
Номер позиции первого символа вхождения значения <выражения> строкового типа в значение <выражения3> строкового типа. Если значение <выражения> не содержится в значении <выражения3>, то значение функции равно нулю. |
Наряду с функцией MID$ в языке QBasic существует и оператор MID$, который позволяет заменять часть символов исходной строки на другие символы. Этот оператор имеет следующий синтаксис:
MID$(<идентификатор>,<выражение1>,<выражение2>)=<выражение>
Здесь <идентификатор>и <выражение> – строкового типа, <выражения1> и <выражения2> – целого типа со значением от 1 до 255. Семантика оператора состоит в следующем: в значении переменной с указанным <идентификатором> символы, начиная с позиции, задаваемой значением <выражения1>, в количестве, задаваемом значением <выражения2> заменяются на первые символы значения <выражение>. Длина значения переменной с указанным идентификатором при этом не меняется.
В языке Паскаль существуют также следующие стандартные процедуры обработки строк:
Delete(<выражение>, <выражение1>, <выражение2>)
Процедура удаляет из выражения строкового типа количество символов, заданное целочисленным выражением1, начиная с символа с номера, заданного целочисленным выражением2.
Insert(<выражение>, <выражение1>, <выражение2>)
Процедура вставляет выражение строкового типа в выражение1 строкового типа, начиная с символа, с номером заданным целочисленным выражением2.
-
Str(<выражение>, <выражение1>) – процедура, преобразует числовую величину, заданную выражением в выражение1 строкового типа.
-
Val(<выражение>, <выражение1>, <выражение2>) – процедура, преобразует выражение строкового типа в числовое выражение1. Если преобразование прошло успешно, то целочисленное выражение2 принимает значение 0.
Пример 2.2.1.
Составить блок-схему и программы для нахождения слов заданной строки
Слово – последовательность символов между пробелами.
S - исходная строка
B – начало слова
I – вспомогательная переменная
Пример на Turbo Pascal:
VAR
S: string;
B, I: integer;
BEGIN
WRITELN (‘Введите строку текста: ’);
READLN (S);
WRITELN (‘Искомые слова: ’);
S:=’ ‘ + S + ‘ ‘;
FOR I:= 1 TO LENGTH (S)-1 DO
BEGIN
IF (S [I]=’ ‘)AND(S [I+1]<>’ ‘) THEN
B:=I+1;
IF (S [I]<>’ ‘)AND(S [I+1]=’ ‘) THEN
WRITELN (COPY(S,B,I-B+1))
END
END.
Пример на QBasic:
INPUT "Введите строку текста: "; S$
PRINT "Искомые слова: ";
B = 1
S$ = " " + S$ + " "
FOR I = 1 TO LEN(S$) - 1
IF ((MID$(S$, I, 1) = " ") AND (MID$(S$, I + 1, 1) <> " ")) THEN
B = I + 1
END IF
IF ((MID$(S$, I, 1) <> " ") AND (MID$(S$, I + 1, 1) = " ")) THEN
PRINT MID$(S$, B, I - B + 1)
END IF
NEXT I