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