Строка - это линейно упорядоченная последовательность симво-
лов, принадлежащих конечному множеству символов, называемому ал-
фавитом.
Строки обладают следующими важными свойствами:
- их длина, как правило, переменна, хотя алфавит фиксирован;
- обычно обращение к символам строки идет с какого-нибудь
одного конца последовательности, т.е важна упорядоченность этой
последовательности, а не ее индексация; в связи с этим свойством
строки часто называют также цепочками;
- чаще всего целью доступа к строке является на отдельный ее
элемент (хотя это тоже не исключается), а некоторая цепочка сим-
волов в строке.
Говоря о строках, обычно имеют в виду текстовые строки -
строки, состоящие из символов, входящих в алфавит какого-либо
выбранного языка, цифр, знаков препинания и других служебных сим-
волов. Действительно, текстовая строка является наиболее универ-
сальной формой представления любой информации: на сегодняшний
день вся сумма информации, накопленной человечеством - от Ветхого
Завета до нашего учебного пособия - представлена именно в виде
текстовых строк. В наших дальнейших примерах этого раздела будем
работать именно с текстовыми строками. Однако, следует иметь в
виду, что символы, входящие в строку могут принадлежать любому
алфавиту. Так, в языке 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 несколько десятков.