Логическая структура строки

Строка - это линейно упорядоченная последовательность симво-

лов, принадлежащих конечному множеству символов, называемому ал-

фавитом.

Строки обладают следующими важными свойствами:

- их длина, как правило, переменна, хотя алфавит фиксирован;

- обычно обращение к символам строки идет с какого-нибудь

одного конца последовательности, т.е важна упорядоченность этой

последовательности, а не ее индексация; в связи с этим свойством

строки часто называют также цепочками;

- чаще всего целью доступа к строке является на отдельный ее

элемент (хотя это тоже не исключается), а некоторая цепочка сим-

волов в строке.

Говоря о строках, обычно имеют в виду текстовые строки -

строки, состоящие из символов, входящих в алфавит какого-либо

выбранного языка, цифр, знаков препинания и других служебных сим-

волов. Действительно, текстовая строка является наиболее универ-

сальной формой представления любой информации: на сегодняшний

день вся сумма информации, накопленной человечеством - от Ветхого

Завета до нашего учебного пособия - представлена именно в виде

текстовых строк. В наших дальнейших примерах этого раздела будем

работать именно с текстовыми строками. Однако, следует иметь в

виду, что символы, входящие в строку могут принадлежать любому

алфавиту. Так, в языке PL/1, наряду с типом данных "символьная

строка" - CHAR(n) - существует тип данных "битовая строка" -

BIT(n). Битовые строки, составляются из 1-битовых символов, при-

надлежащих алфавиту: { 0, 1 }. Все строковые операции с равным

успехом применимы как к символьным, так и к битовым строкам.

Кодирование символов было рассмотрено в главе 2. Отметим,

что в зависимости от особенности задачи, свойств применяемого ал-

фавита и представляемого им языка и свойств носителей информации

могут применяться и другие способы кодирования символов. В совре-

менных вычислительных системах, однако, повсеместно принята коди-

ровка всего множества символов на разрядной сетке фиксированного

размера (1 байт).

Хотя строки рассматриваются в главе, посвященной полустати-

ческим структурам данных, в тех или иных конкретных задачах из-

менчивость строк может варьироваться от полного ее отсутствия до

практически неограниченных возможностей изменения. Ориентация на

ту или иную степень изменчивости строк определяет и физическое

представление их в памяти и особенности выполнения операций над

ними. В большинстве языков программирования (C, PASCASL, PL/1 и

др.) строки представляются именно как полустатические структуры.

В зависимости от ориентации языка программирования средства

работы со строками занимают в языке более или менее значительное

место. Рассмотрим три примера возможностей работы со строками.

Язык C является языком системного программирования, типы

данных, с которыми работает язык C, максимально приближены к тем

типам, с которыми работают машинные команды. Поскольку машинные

команды не работают со строками, нет такого типа данных и в языке

C. Строки в C представляются в виде массивов символов. Операции

над строками могут быть выполнены как операции обработки массивов

или же при помощи библиотечных (но не встроенных!) функций стро-

ковой обработки.

В языках универсального назначения обычно строковый тип яв-

ляется базовым в языке: STRING в PASCAL, CHAR(n) в PL/1. (В

PASCAL длина строки, объявленной таким образом, может меняться от

0 до n, в PL/1 чтобы длина строки могла меняться, она должна быть

объявлена с описателем VARING.) Основные операции над строками

реализованы как простые операции или встроенные функции. Возможны

также библиотеки, обеспечивающие расширенный набор строковых опе-

раций.

Язык REXX ориентирован прежде всего на обработку текстовой

информации. Поэтому в REXX нет средств описания типов данных: все

данные представляются в виде символьных строк. Операции над дан-

ными, не свойственные символьным строкам, либо выполняются специ-

альными функциями, либо приводят к прозрачному для программиста

преобразованию типов. Так, например, интерпретатор REXX, встретив

оператор, содержащий арифметическое выражение, сам переводит его

операнды в числовой тип, вычисляет выражение и преобразует ре-

зультат в символьную строку. Целый ряд строковых операций являет-

ся простыми операциями языка, а встроенных функций обработки

строк в REXX несколько десятков.