Читайте также:
|
|
Над строковыми данными допустимы операция сцепления (конкатенации) и операции отношения. Используя строковые переменные, константы, функции и операцию сцепления, можно строить строковые выражения.
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+}, поэтому строковые параметры (и формальный, и фактический) должны бьЕТЬ одного размера. Рекомендуем использовать данную директиву, но с осторожностью, т. к. есть риск потери символов справа, если не хватит места в той строке, которая передается в качестве фактического параметра.
Дата добавления: 2015-11-14; просмотров: 55 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Листинг 9.1. Вывод строки в перевернутом виде и по отдельным словам | | | Процедуры преобразования типов |