Классы 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:
tempiate
class _declspec(delphireturn) Set;
При объявлении конкретного класса нужно задать следующие параметры: тип
элементов (обычто целый, символьный или перечисление), минимальное значение,
которое может содержать множество (должно быть не меньше 0), и максимальное
значение, которое может входить в множество (должно быть не больше 255). Вот
примеры:
Set a5et0f32;
typedef Set SetOfUppercase;
Перегруженный конструктор создает либо пустое множество, либо копию
существующего множества того же типа.
Множества можно складывать, умножать (объединение и пересечение) и вычитать
(пересечение c дополнением). Операции " и " соответственно вводят или удаляют
элемент из множества. Эти же операции могут использоваться для извлечения и
передачи множеств в поток (в виде последовательностей нулей и единиц), если
перед sysset.h включается заголовок iostream или директива
#define VCL_IOSTREAM
Множества Set имеют два метода:
- Sets _fastcall Clear (); Удаляет из множества все элементы.
- boo1 _fastcall Contains(const T el) const; Возвращает true, если множество
содержит указанный элемент.