AnsiString - Общи въпроси, C
За да започнете, кратко представяне
AnsiString е клас динамичен низ с капацитет до 232-1 знака. Този клас се основава на типа Pascal String, който е разширен в съответствие с възможностите на C++.
Неговата особеност е, че два екземпляра от този клас могат физически да заемат една и съща област на паметта. Екземпляр от този клас съдържа референтен брояч към него, когато този брояч се нулира, екземплярът автоматично се унищожава. Ако се опитате да промените екземпляр, към който има повече от една препратка, тогава ще бъде създадено ново копие на този низ, което ще бъде променено. Това намалява преносимостта на програмата в паметта, но също така намалява скоростта на обработка.
Наследството на Pascal също е, че символите в него са номерирани от 1, а не от 0, както е обичайно в C / C ++ Създаване на низ
Благодарение на наличието на претоварени конструктори, низ може да бъде създаден от голям брой основни езикови типове C++, например:
AnsiString празен_низ; /* празен низ */ AnsiString one = 1; /* низ едно ще съдържа "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 = "низ"; AnsiString shorten("Long string",7); /* само първите 7 знака ще влязат в shorten */ получаване на знак от низ
Можете да получите знак от 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 предоставя възможност за търсене (Pos), вмъкване (Insert), изтриване (Delete) и получаване на копие (SubString) на част от текст в низ:
ansiString ansi_string = "низ"; int index = ansi_string.Pos("ka"); /* намиране на края на думата */ if( index != 0 ) ansi_string.Insert("chech",index); /* сега низът изглежда като "Линия" */ ansi_string.Delete(index,2); /* и сега - "Линия" */ > Как да резервирате определена линияразмер
Понякога може да е необходимо да се запази достатъчно място за низ, който да съдържа определен брой знаци. Можете да направите това с функцията SetLength.