Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

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

Автор: trainer
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

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
12K
05 мая 2005 года
BlackHart
0 / / 05.05.2005
+1 / -0
Мне нравитсяМне не нравится
24 мая 2008, 01:14:41
Спасибо автору строки. Очень полезная для моей лабораторной работы информация, особенно поиск в строке фрагмента - суппер! :)
2.
31K
10 августа 2007 года
Mr. Demrtius
0 / / 10.08.2007
+1 / -0
Мне нравитсяМне не нравится
10 августа 2007, 18:20:27
Статья - супер, очень мне помогла при создании одного проекта. Автору респект.
3.
23K
04 ноября 2006 года
Log1c
4 / / 04.11.2006
Мне нравитсяМне не нравится
16 декабря 2006, 18:33:11
Строки типа AnsiString
4.
23K
04 ноября 2006 года
Log1c
4 / / 04.11.2006
Мне нравитсяМне не нравится
16 декабря 2006, 18:28:04
2SABROG

не думаю что из этого что-то получится если это относится к этой теме.
Наверно спрашивали как как прочитать/записать <b>строку</b> из/в файл.
5.
22K
22 сентября 2006 года
Redrik
0 / / 22.09.2006
Мне нравитсяМне не нравится
23 сентября 2006, 08:27:32
[center]А Я НИФФИГА НЕ ПОНЯЛ![/center]
Я вообще ламер но ОООЧЕНЬ хочу стать прогромам!
6.
Аноним
+1 / -0
Мне нравитсяМне не нравится
6 мая 2006, 22:50:43
2ruford: хоть постил чуть не в 2004м, все-равно отвечу. Можно например так:

TStringList *Buffer = new TStringList;
Buffer->Add("MyString");
Buffer->SaveToFile("MyFile.txt");

загрузка так:

TStringList *Buffer = new TStringList;
Buffer->LoadFromFile("MyFile.txt");
7.
Аноним
Мне нравитсяМне не нравится
4 февраля 2005, 16:50:06
Type Maximum length Memory required Used for
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
8.
Аноним
+1 / -0
Мне нравитсяМне не нравится
14 января 2005, 10:53:53
В этом примере нужно осветить, по моему мнению, такой аспект - как прочитать/записать строку из/в файл.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог