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


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

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

Class CString основан на классе CStringT шаблона класса. CString— это .typedefCStringT Точнее, 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. Дополнительные сведения см. в разделе Юникод и многобайтовый набор символов (МБ CS).

Доступ к отдельным символам в 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 МБ CS и Юникода знают; CompareNoCase также учитывает регистр. Метод CollateCString является языковым стандартом и часто медленнее Compare. Используйте Collate только место, где необходимо соблюдать правила сортировки, указанные текущим языковым стандартом.

В следующей таблице показаны доступные функции сравнения CString и их эквивалентные функции Юникода/МБ CS-переносимых в библиотеке времени выполнения C.

Функция CString Функция МБ CS Функция Юникода
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
Специализация шаблонов
Практическое руководство. Преобразование различных типов строк