676_____________________________________________Глава 12

I

Мы рассмотрели применение основных библиотечных функций работы со
строками. Более полное изложение этих функций вы найдете в главе 14 в разделе
14.11.

C++Builder не ограничивается изложенным выше типичным для C++ подхо-
дом, сводящим строки к массивам символов. В нем реализованы в виде классов
еще некоторые очень полезные типы. Наиболее интересные из них — AnsiString,
имеющий множество методов и перегруженных операций, облегчающих работу со
строками, и типы списков строк TStrings и TStringList. Первый из них рассмот-
рен в следующем разделе. А описание второго и третьего вы найдете в главе 15.

12.4.2 Тип строк AnsiString

В C++Builder тип строк AnsiString реализован как класс, объявленный в фай-
ле vcl/dstring.h и аналогичный типу длинных строк в Delphi. Это строки с нуле-
вым символом в конце. При объявлении переменные типа AnsiString инициализи-
руются пустыми строками.

Для AnsiString определены операции отношения ==, !=, >, <, >=, <=. Сравне-
ние производится с учетом регистра. Сравниваются коды символов, начиная с пер-
вого, и если очередные символы не одинаковы, строка, содержащая символ с мень-
шим кодом считается меньше. Если все символы совпали, но одна строка длиннее
и в ней имеются еще символы, то она считается больше, чем более короткая.

Для AnsiString определены операции присваивания =, += и операция склеи-
вания строк (конкатенации) +. Определена также операция индексации []. Индек-
сы начинаются с 1. Например, если S1 = «Привет», то S1[1] вернет 'П', S1[2] вер-
нет 'р' и т.д.

Класс AnsiString имеет множество методов, подробно рассмотренных в главе
15. Не останавливаясь сейчас на их перечислении, рассмотрим только некоторые
примеры применения типа AnsiString.

Тип AnsiString используется для ряда свойств компонентов C++Builder. На-
пример, для таких, как свойства Text окон редактирования, свойства Caption ме-
ток и разделов меню и т.д. Этот же тип используется для отображения отдельных
строк в списках строк типа TStrings. Таким образом, постоянно имея дело с этими
свойствами, вы постоянно работаете с AnsiString.

Рассмотрим некоторые примеры работы с AnsiString. Следующий оператор
демонстрирует конкатенацию (склеивание) двух строк:

Labell->Caption = Editl->Text + ' ' + Edit2->Text;

В данном случае в свойстве Label l->Caption отображается текст, введенный
пользователем в окне редактирования Editi, затем записывается символ пробела,
а затем — текст, введенный в окне редактирования Edit2.

Как видите, склеивание строк типа AnsiString легко осуществляется перегру-
женной операцией сложения «+». Сравните это с теми вложенными вызовами
функций strcat, которые приходилось делать в предыдущем разделе для тех же
операций со строками типа (char *), и вы почувствуете преимущества AnsiString.

Теперь попробуем повторить рассмотренный в предыдущем разделе поиск в
строке S1 фрагмента, заданного строкой S2, и замена его текстом строки S3. Код,
осуществляющий эти операции, может иметь вид:

AnsiString S1, S2, S3;

// операторы занесения текста в S1, S2, S3

int i = Sl.Pos(S2);                                                    ;

if(i)
Labell->Caption = S1.Substring(1,i-1) + S3 +                         ,

S1. Substring (i+S2. Length () ,255);'
else Labell->Caption = "Текст не найден";