AnsiString - общие вопросы
www.исходники.ru
Для начала краткая информация
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
Оставить комментарий
Комментарии
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)
не думаю что из этого что-то получится если это относится к этой теме.
Наверно спрашивали как как прочитать/записать <b>строку</b> из/в файл.
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)
Я вообще ламер но ОООЧЕНЬ хочу стать прогромам!
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)
TStringList *Buffer = new TStringList;
Buffer->Add("MyString");
Buffer->SaveToFile("MyFile.txt");
загрузка так:
TStringList *Buffer = new TStringList;
Buffer->LoadFromFile("MyFile.txt");
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
WideString ~2^30 characters 4 bytes to 2GB Unicode characters;
multi-user servers and multi-language applications
![Мне нравится](http://i.codenet.ru/vote_good.gif)
![Мне не нравится](http://i.codenet.ru/vote_bad.gif)