Поделиться через


Базовые операции CString

В этом разделе описаны следующие основные операции CString :

Class CString основан на шаблоне CStringTкласса. CString— это .typedefCStringT Точнее, CString является явной специализациейtypedef, которая является общим способом использования шаблона класса CStringT для определения класса. Аналогичным образом определены классы 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 также не учитывает регистр. Метод CollateCString является языковым стандартом и часто медленнее 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
Специализация шаблонов
Практическое руководство. Преобразование различных типов строк