Обработка строк является важнейшей составной частью работы со структу­рами данных. Очень часто именно удобство работы со строками определяет выбор языка пользователем. Имеется много языков программирования, ори­ентированных именно на работу со строками, но часто в таких языках отсут­ствуют развитые средства работы с другими типами данных. Яркими пред­ставителями таких языков являются Рефал и Снобол. В то же время в тради­ционных универсальных языках программирования, таких как С, Pascal, Java, средства работы со строками присутствуют в весьма ограниченном виде. Как правило, предоставляются методы для склеивания строк, поиска подстрок, вырезания фрагментов строк. Иногда предоставляются простые способы для модификации строк - вставка новых фрагментов в заданную строку, добав­ление символов и строк в конец заданной строки и т. п. Часто имеются сред­ства для преобразования других объектов языка в строковое представление и обратно.

Тем не менее для серьезной обработки строк этого недостаточно. Прежде всего необходимо тщательно продумать механизмы распределения памяти под строковые объекты. Если при каждом добавлении одного символа в ко­нец имеющейся длинной строки происходит отведение памяти под всю стро­ку, то эффективность работы программы от этого очень страдает. Далее, же­лательно иметь средства для сравнения строк с заданным образцом, быстрые операции поиска подстроки в длинном тексте и т. д.

К счастью, универсальные языки программирования предоставляют возмож­ности организации собственных типов и данных и методов работы с ними. Ниже рассматриваются несколько способов организации строковых объектов в языке программирования. Как и везде, в книге в качестве инструментально­го средства используется язык C++, однако похожим образом можно органи­зовать данные и на любом другом языке, поддерживающем определение соб­ственных структур данных.