Базовые операции CString
В этом разделе описаны следующие основные операции CString :
Class CString
основан на классе CStringT шаблона класса. CString
— это .typedef
CStringT
Точнее, CString
является явной специализациейCStringT
, которая является общим способом использования шаблона класса typedef
для определения класса. Аналогичным образом определены классы CStringA
и CStringW
.
CString
, CStringA
и CStringW
определены в atlstr.h. CStringT
определяется в cstringt.h.
CString
, CStringA
и CStringW
каждый получает набор методов и операторов, определенных CStringT
для использования со строковыми данными, которые они поддерживают. Некоторые методы дублируются и, в некоторых случаях, превышают строковые службы библиотек времени выполнения C.
Примечание. CString
Это собственный класс. Для строкового класса, используемого в управляемом проекте C++/CLI, используйте System.String
.
Создание объектов CString из стандартных строк литеральных строк C
Вы можете назначить строки CString
литералов в стиле C так же, как можно назначить один CString
объект другому.
Назначьте значение строки литерала C объекту
CString
.CString myString = _T("This is a test");
Назначьте значение одного
CString
объекта другомуCString
объекту.CString oldString = _T("This is a test"); CString newString = oldString;
Содержимое
CString
объекта копируется при назначении одногоCString
объекта другому. Поэтому две строки не используют ссылку на фактические символы, составляющие строку. Дополнительные сведения об использованииCString
объектов в качестве значений см. в разделе CString Semantics.Примечание.
Чтобы написать приложение, чтобы его можно было скомпилировать для Юникода или ANSI, строки литерала кода с помощью макроса _T. Дополнительные сведения см. в разделе Юникод и поддержка многобайтового набора символов (MBCS).
Доступ к отдельным символам в CString
Доступ к отдельным символам в CString
объекте можно получить с помощью GetAt
методов и SetAt
методов. Кроме того, можно использовать элемент массива или подстрок, оператор ( [ ] ) вместо GetAt
получения отдельных символов. (Это напоминает доступ к элементам массива по индексу, как в стандартных строках в стиле C.) Значения индекса для CString
символов основаны на нулях.
Объединение двух объектов CString
Чтобы объединить два объекта, используйте операторы CString
объединения (+ или +=), как показано ниже.
CString s1 = _T("This "); // Cascading concatenation
s1 += _T("is a ");
CString s2 = _T("test");
CString message = s1 + _T("big ") + s2;
// Message contains "This is a big test".
По крайней мере один аргумент для операторов объединения (+ или +=) должен быть CString
объектом, но для другого аргумента можно использовать константную символьную строку (например, "big"
x char
).
Сравнение объектов CString
Метод Compare
и оператор == для CString
них эквивалентны. Compare
, оператор==, а CompareNoCase
также учитывается MBCS и Юникод; CompareNoCase
также не учитывает регистр. Метод Collate
CString
является языковым стандартом и часто медленнее Compare
. Используйте Collate
только место, где необходимо соблюдать правила сортировки, указанные текущим языковым стандартом.
В следующей таблице показаны доступные функции сравнения CString и их эквивалентные функции Юникод/MBCS-переносимые в библиотеке времени выполнения C.
Функция CString | Функция MBCS | Функция Юникода |
---|---|---|
Compare |
_mbscmp |
wcscmp |
CompareNoCase |
_mbsicmp |
_wcsicmp |
Collate |
_mbscoll |
wcscoll |
Шаблон CStringT
класса определяет реляционные операторы (<=, <=, =, >>== и !=), которые доступны для использованияCString
. Вы можете сравнить два CStrings
оператора с помощью этих операторов, как показано в следующем примере.
CString s1(_T("Tom"));
CString s2(_T("Jerry"));
ASSERT(s2 < s1);
Преобразование объектов CString
Сведения о преобразовании объектов CString в другие типы строк см. в разделе "Практическое руководство. Преобразование между различными типами строк".
Использование CString с wcout
Чтобы использовать CString с wcout
объектом, необходимо явно привести объект к const wchar_t*
объекту, как показано в следующем примере:
CString cs("meow");
wcout << (const wchar_t*) cs << endl;
Без приведения cs
обрабатывается как void*
адрес объекта и wcout
печатается. Это поведение вызвано тонким взаимодействием между вычетом аргументов шаблона и разрешением перегрузки, которые сами по себе правильны и соответствуют стандарту C++.
См. также
Строки (ATL/MFC)
Класс CStringT
Специализация шаблонов
Практическое руководство. Преобразование различных типов строк