Классы AnsiString и Set
В VCL для представления текстовых строк используются не символьные массивы и не шаблон стандартной библиотеки, а строки Object Pascal. Кроме того, многие свойства компонентов представлены множествами этого языка. Для моделирования таких объектов C++Builder реализует классы AnsiString и Set. В этой статье мы даем краткое описание этих классов.
Класс AnsiString
Класс AnsiString определяется в заголовке dstring.h. Конструктор этого класса перегружен, так что строки можно инициализировать различными способами - другой строкой, строкой С (указателем на char), а также целыми типами. В последнем случае строка будет содержать текстовое представление числа.
Методы
Мы не будем приводить здесь полное описание всех методов AnsiString, а расскажем только о важнейших.
- int _fastcall AnsiCompare(const AnsiStringfi rhs) const.; Этот метод производит сравнение строки с указанной строкой. Сравнение производится в соответствии с текущим локалом Windows, т. е., например, в русифицированной системе сравнение строк с русским текстом должно давать правильный результат. (Честно говоря, я этого не проверял.) Соответственно результат сравнения может отличаться от результата операций сравнения, которые производятся исходя из ASCII-значений символов.
- int _fastcall AnsiPos(const AnsiStringS subStr) const; Метод возвращает позицию указанной подстроки. Первому символу строки соответствует 1. Нулевой результат означает, что подстрока не найдена.
- char* _fastcall с str() const; Возвращает указатель на ограниченную нулем строку С (символьный массив). Если строке ничего не присвоено, возвращается указатель на пустую строку.
- const void* fastcall data() const { return Data; } Аналогичен предыдущему, но возвращает нулевой указатель в случае неприсвоенной строки.
- AnsiString& _fastcall Delete(int index, int count); Удаляет заданное число символов начиная с указанной позиции. Позиция 1 соответствует первому символу строки.
enum TStringFloatFormat{sffGeneral, sffExponent, sffFixed, sffMumber, sffCurrency };
- static AnsiString _fastcall FloatToStrF(long double value, TStringFloatFormat format, int precision, int digits) ; Производит преобразование числа с плавающей точкой в текстовую форму в соответствии с указанным форматом.
- AnsiString& _fastcall Insert(const AnsiString& sir, int index) ; Вставляет строку в указанной позиции (1 - перед первым символом). Если индекс меньше 1, он считается единицей.
- static AnsiString fastcall IntToHex(int value,int digits) ; Преобразует число в строку с представлением его в виде щестнадцате-ричных цифр. Второй параметр указывает минимальное число цифр. Аналогичен Pos, но допускает многобайтовые символы.
- bool _fastcall IsDelimiter (const AnsiString& delimiters, int index) const; Проверяет, входит ли символ в позиции index в указанную строку delimiters.
- bool _fastcall IsEmptyO const; Возвращает true, если строка пустая.
- int _fastcall LastDelimiter (const AnsiString& delimiters) const; Возвращает позицию последнего из символов строки, входящих в указанную строку ограничителей.
- int _fastcall Length() const; Возвращает число байтов в строке.
- static AnsiString fastcall LoadStr(int ident) ; Загружает строку строковым ресурсом исполняемого файла. Если ресурса с указанным идентификатором не существует, возвращается пустая строка.
- AnsiString _fastcall Lowercase() const; Возвращает строку, преобразованную в нижний регистр в соответствии С Текущим ЛОКалом Windowa. He хюмвняет исходную строку.
- int _fastcall Pos(const AnsiString& subStr) const; Возвращает позицию указанной подстроки.
- int _cdecl printf(const char* format, ...); Формирует строку в соответствии со стандартным форматом С. Возвращает длину строки-результата.
- AnsiString& _fastcall SetLength(int newLength) ; Устанавливает новую длину строки, перераспределяя память под ее символьный массив. В новый массив копируется исходное содержимое строки. Если новая длина меньше исходной, строка усекается.
- AnsiString& cdecl sprintf(const char* format, ...); To же, что и printf (), но возвращается ссылка на модифицированную строку (*this).
- StringOfChar
- AnsiString fastcall Substring(int index, int count) const; Возвращает подстроку с указанной позицией и длиной.
- AnsiString _fastcall Substring(int index, int count) const; Преобразует строку в число двойной точности. Если строка не содержит корректного представления числа с плавающей точкой, выбрасывается исключение EConvertError.
- int _fastcall Tolnt() const; Преобразует строку в целое. Если строка не содержит корректного представления числа, выбрасывается исключение EConvertError.
- int _fastcall ToIntDef(int defaultValue) const; Преобразует строку в целое. Если строка не содержит корректного представления числа, возвращается указанное значение по умолчанию.
- AnsiString fastcall Trim() const; Возвращает строку с удаленными начальными и конечными пробелами и управляющими символами.
- AnsiString fastcall TrimLeftO const; Возвращает строку с удаленными начальными пробелами и управляющими символами.
- AnsiString _fastcall TrimRight() const; Возвращает строку с удаленными конечными пробелами и управляющими символами.
- Unique
- AnsiString _fastcall Uppercase() const; Возвращает строку, преобразованную в верхний регистр в соответствии с текущим локалом Windows. He изменяет исходную строку. В классе AnsiString реализованы операции присваивания, сложения (возвращает конкатенацию строк), индексации (возвращает символ с указанным индексом) и отношений (сравниваются ASCII-значения входящих В строку символов).
Если перед dstring.h включается заголовок iuatrcam кла директива
#define vcl_iostream
то строки можно использовать в операторах ввода/вывода потоков C++ с операциями " и ".
Класс Set
Set - это шаблон, определенный в заголовке sysset.h:
tempiateclass _declspec(delphireturn) Set;
При объявлении конкретного класса нужно задать следующие параметры: тип элементов (обычто целый, символьный или перечисление), минимальное значение, которое может содержать множество (должно быть не меньше 0), и максимальное значение, которое может входить в множество (должно быть не больше 255). Вот примеры:
Seta5et0f32; typedef Set SetOfUppercase;
Перегруженный конструктор создает либо пустое множество, либо копию существующего множества того же типа.
Множества можно складывать, умножать (объединение и пересечение) и вычитать (пересечение c дополнением). Операции " и " соответственно вводят или удаляют элемент из множества. Эти же операции могут использоваться для извлечения и передачи множеств в поток (в виде последовательностей нулей и единиц), если перед sysset.h включается заголовок iostream или директива
#define VCL_IOSTREAM
Множества Set имеют два метода:
- Sets _fastcall Clear (); Удаляет из множества все элементы.
- boo1 _fastcall Contains(const T el) const; Возвращает true, если множество содержит указанный элемент.