Панель управления
Оплаченные ссылки
Категория: Статьи
- 85
Автор: admin
Для начала краткая информация
AnsiString - класс динамической строки емкостью до 232-1 символов. Базой для создания этого класса послужил паскалевский тип String, который был расширен в соответствии с возможностями C++.
Особенностью его является то, что два экземпляра этого класса могут физически занимать один и тот же участок памяти. Экземпляр этого класса содержит счетчик ссылок к нему, когда этот счетчик обнуляется, экземпляр автоматически уничтожается. Если попытаться изменить экземпляр, к которому имеется более одной ссылки, то будет создана новая копия этой строки, которая и будет изменяться. Это уменьшает портебность программы в памяти, но и уменьшает скорость обработки.
Наследием Паскаля является также то, что символы в нем нумеруются с 1, а не с 0, как это принято в C/C++
Создание строки
Благодаря наличию перегруженных конструкторов строку можно создавать из большого количества базовых типов языка C++, например:
Получение символа из строки
Получить символ из строки типа AnsiString можно с помощью индексного оператора:
Получение символьного массива, содержащего значение AnsiString
Функции библиотеки исполнения C и функции WinAPI требуют, чтобы строки передавались им в виде символьных массивов. В AnsiString для этого предназначены функции c_str и data. Разница между ними в том, что для пустой строки c_str возвращает "", а data - NULL. Это отличие может быть проиллюстрировано следующим примером:
Копирование значения AnsiString в символьный массив Unicode
Для этого предназначена функция WideChar, а размер требуемого массива можно узнать, воспользовавшись функцией WideCharBufSize
Как узнать, сколько символов в строке?
Для этого надо воспользоваться функцией Length.
Как удалить в строке концевые пробелы?
Это делают функции Trim, TrimLeft и TrimRight соответственно с обоих концов, только с начала и только с конца.
Работа с фрагментами строки
AnsiString предоставлякт возможность поиcка(Pos), вставки(Insert), удаления(Delete) и получения копии(SubString) фрагмента текста в строке:
Как зарезервировать строке определенный размер
Иногда бывает нужно зарезервировать для строки пространство, достаточное для хранения определенного количества символов. Сделать это можно при помощи функции SetLength.
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.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

