AnsiString - общие вопросы

Для начала краткая информация

AnsiString - класс динамической строки емкостью до 232-1 символов. Базой для создания этого класса послужил паскалевский тип String, который был расширен в соответствии с возможностями C++.

Особенностью его является то, что два экземпляра этого класса могут физически занимать один и тот же участок памяти. Экземпляр этого класса содержит счетчик ссылок к нему, когда этот счетчик обнуляется, экземпляр автоматически уничтожается. Если попытаться изменить экземпляр, к которому имеется более одной ссылки, то будет создана новая копия этой строки, которая и будет изменяться. Это уменьшает портебность программы в памяти, но и уменьшает скорость обработки.

Наследием Паскаля является также то, что символы в нем нумеруются с 1, а не с 0, как это принято в C/C++
Создание строки

Благодаря наличию перегруженных конструкторов строку можно создавать из большого количества базовых типов языка C++, например:

AnsiString empty_string; /* пустая строка */
AnsiString one = 1; /* строка one будет содержать "1" */
AnsiString one_and_half = 1.5; /* в one_and_half содержится строка "1.5" */
AnsiString one_charachter = \'a\'; /* в one_charachter содержится строка "a" */
/* dup_string получит значение "AAAAA" */
AnsiString dup_string = AnsiString::StringOfChar(\'A\',5);
AnsiString simply_string = "string";
AnsiString shorten("Длинная строка",7); /* в shorten попадут только первые
7 символов */
получение символа из строки

Получить символ из строки типа AnsiString можно с помощью индексного оператора:

AnsiString ansi_string = "Строка";
char character = ansi_string[1]; /* получаем самый первый символ */
ansi_string[6] = \'и\'; /* заменим 6-й на букву \'и\' */
Получение символьного массива, содержащего значение AnsiString

Функции библиотеки исполнения C и функции WinAPI требуют, чтобы строки передавались им в виде символьных массивов. В AnsiString для этого предназначены функции c_str и data. Разница между ними в том, что для пустой строки c_str возвращает "", а data - NULL. Это отличие может быть проиллюстрировано следующим примером:

AnsiString ansi_string;
char * str1 = ansi_string.c_str();
char * str2 = (char *)ansi_string.data();
Копирование значения AnsiString в символьный массив Unicode

Для этого предназначена функция WideChar, а размер требуемого массива можно узнать, воспользовавшись функцией WideCharBufSize

AnsiString ansi_string = "Строка AnsiString"; /* наша строка */
/* массив-получатель */
wchar_t * UnicodeString = new wchar_t[ansi_string.WideCharBufSize()];
ansi_string.WideChar(UnicodeString,ansi_string.WideCharBufSize());
// используем полученную строку, затем удаляем
delete [] UnicodeString;
Как узнать, сколько символов в строке?

Для этого надо воспользоваться функцией Length.
Как удалить в строке концевые пробелы?

Это делают функции Trim, TrimLeft и TrimRight соответственно с обоих концов, только с начала и только с конца.
Работа с фрагментами строки

AnsiString предоставлякт возможность поиcка(Pos), вставки(Insert), удаления(Delete) и получения копии(SubString) фрагмента текста в строке:

AnsiString ansi_string = "Строка";
int index = ansi_string.Pos("ка"); /* найдем окончание слова */
if( index != 0 ) {
ansi_string.Insert("чеч",index); /* теперь строка имеет вид "Строчечка" */
ansi_string.Delete(index,2); /* а теперь - "Строчка" */
}
Как зарезервировать строке определенный размер

Иногда бывает нужно зарезервировать для строки пространство, достаточное для хранения определенного количества символов. Сделать это можно при помощи функции SetLength



Опубликовал admin
22 Мар, Понедельник 2004г.



Программирование для чайников.