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

9.2. Операции над строками

Над строковыми данными допустимы операция сцепления (конкатенации) и операции отношения. Используя строковые переменные, константы, функ­ции и операцию сцепления, можно строить строковые выражения.

9.2.1. Операция сцепления (+)

Применяется для соединения нескольких строк.

Например:

Выражение: 'Turbo' + ' Pascal' + '7.0'

Результат: Turbo Pascal 7.0'

Обратите внимание— операция конкатенации, в отличие от операции сло­жения в математике, не подчиняется известному правилу: "от перестановки слагаемых сумма не меняется", в этой операции каждый из операндов дол­жен находиться строго на своем месте.

Замечание j

Для того чтобы предоставить программистам возможность использовать один и тот же знак операции "+" для работы с данными разных типов, разработчикам компилятора Turbo Pascal пришлось изрядно потрудиться. При обработке тек­ста программы компилятор анализирует типы операндов и формирует для опе­рации "+" различные машинные коды для целых, вещественных и строковых типов. Такое явление в программировании принято называть полиморфизмом. Запомните этот термин— он пригодится на следующих этапах постижения ис­кусства программирования.

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания.

Например: strl := Труппа учащихся'; str2 := strl + ' школы-лицея';

Приведем пример использования операции конкатенации (листинг 9.3). До­пустим, необходимо дополнить исходную строку справа символом '*' до заданной длины. Такое действие иногда выполняют при формировании важных денежных документов, чтобы нельзя было ничего вписать в пустые места.

[Листинг 9.3.Дополнение строки звездочками '

!...-. ;.-...:... .-• ; !.'..:.: : :..:.'. .-

var s:string;

procedure dopstr(var s:string; n:integer);.

begin

while length(s)<n do s:=s+'*'; end; begin

writeln('Введите строку:');readln(s};

dopstr(s,80); writeln(s); readln end.

Если в тексте процедуры поменять s+' *' на ' *' +s, то строка будет дополнять­ся пробелами не справа, а слева. Было бы разумно добавить в процедуру dopstr еще два параметра: символ, которым следует дополнять строку, и спо­соб дополнения строки (слева, справа, слева и справа равномерно).

Обратите внимание — все строковые типы считаются совместимыми по при­сваиванию, т. е. можно присваивать друг другу значения строк различного размера. К сожалению, размеры строк при этом не контролируются. Если значение переменной после выполнения оператора присваивания превыша­ет по длине максимальный размер, указанный при объявлении, все лишние символы справа отбрасываются, что важно!

Например:

const si:string[13]='Turbo Pascal';

var s2:string[5];

begin

s2:=sl; . . .

Переменная s2 при этом получит значение 'Turbo', т. к. присваиваемое значение 'Turbo Pascal1 не разместить в тех пяти байтах, которые отведены под символы переменной s2. Фактически операция присваивания будет вы­полнена неверно, хотя никакого сообщения об ошибке не будет выдано.

Замечание

При отладке задач со строками целесообразно помещать в программу директи­ву {$R+}, которая проверяет выход за пределы диапазона изменения индекса. Однако в приведенном выше случае и это не поможет. Остается надеяться только на свою внимательность!

При передаче строки в качестве параметра процедуры совместимость строк разной длины возможна только при отключенной директиве компилятора строгой проверки типов строк ($v-). По умолчанию она включена — {$v+}, поэтому строковые параметры (и формальный, и фактический) должны бьЕТЬ одного размера. Рекомендуем использовать данную директиву, но с осторожностью, т. к. есть риск потери символов справа, если не хватит места в той строке, которая передается в качестве фактического параметра.