Compartilhar via


Operações CString básicas

Este tópico explica as seguintes operações básicas de CString:

Class CString se baseia na classe CStringT do modelo de classe. CString é um typedef de CStringT. Mais exatamente, CString é um typedef de uma especialização explícita de CStringT, que é uma maneira comum de usar um modelo de classe para definir uma classe. Classes definidas da mesma maneira são CStringA e CStringW.

CString, CStringA e CStringW são definidos em atlstr.h. CStringT é definido em cstringt.h.

CString, CStringA e CStringW todos obtêm um conjunto dos métodos e operadores definidos por CStringT para uso com os dados de cadeia de caracteres compatíveis. Alguns dos métodos duplicam e, em alguns casos, superam os serviços de cadeia de caracteres das bibliotecas de tempo de execução C.

Observação: CString é uma classe nativa. Para uma classe de cadeia de caracteres que é usada em um projeto gerenciado C++/CLI, use System.String.

Criando objetos CString a partir de cadeias de caracteres literais padrão C

É possível atribuir cadeias de caracteres literais no estilo C a um CString assim como é possível atribuir um objeto CString a outro.

  • Atribua o valor de uma cadeia de caracteres literal C a um objeto CString.

    CString myString = _T("This is a test");   
    
  • Atribua o valor de um CString a outro objeto CString.

    CString oldString = _T("This is a test");
    CString newString = oldString;
    

    O conteúdo de um objeto CString é copiado quando um objeto CString é atribuído a outro. Portanto, as duas cadeias de caracteres não compartilham uma referência com os caracteres reais que compõem a cadeia de caracteres. Para obter mais informações sobre como usar objetos CString como valores, consulte Semântica do CString.

    Observação

    Para escrever o aplicativo para que seja compilado para Unicode ou para ANSI, codifique cadeias de caracteres literais usando a macro _T. Para obter mais informações, consulte Suporte ao MBCS (Conjunto de Caracteres Multibyte e Unicode).

Acessando caracteres individuais em um CString

Acesse caracteres individuais em um objeto CString usando os métodos GetAt e SetAt. Também é possível usar o elemento matriz, ou subscrever, operador ( [ ] ) em vez de GetAt para obter caracteres individuais. (Isso se assemelha ao acesso a elementos de matriz por índice, como em cadeias de caracteres de estilo C padrão). Os valores de índice de caracteres CString são baseados em zero.

Concatenando dois objetos CString

Para concatenar dois objetos CString, use os operadores de concatenação (+ ou +=), da seguinte maneira.

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".

Pelo menos um argumento aos operadores de concatenação (+ ou +=) deve ser um objeto CString, mas é possível usar uma cadeia de caracteres constante (por exemplo, "big") ou um char (por exemplo, 'x') para o outro argumento.

Comparando objetos CString

O método Compare e o operador == para CString são equivalentes. Compare, operator== e CompareNoCase são compatíveis com MBCS e Unicode; CompareNoCase também não diferencia maiúsculas de minúsculas. O método Collate de CString é sensível à localidade e geralmente é mais lento do que Compare. Use Collate somente onde é necessário cumprir as regras de classificação, conforme especificado pela localidade atual.

A tabela a seguir mostra as funções de comparação de CString disponíveis e suas funções unicode/MBCS portáteis equivalentes na biblioteca de tempo de execução C.

Função CString Função MBCS Função UNICODE
Compare _mbscmp wcscmp
CompareNoCase _mbsicmp _wcsicmp
Collate _mbscoll wcscoll

O modelo de classe CStringT define os operadores relacionais (<, <=, >=, = , >==, e !=), que estão disponíveis para uso por CString. É possível comparar dois CStrings usando esses operadores, conforme mostrado no exemplo a seguir.

CString s1(_T("Tom"));
CString s2(_T("Jerry"));
ASSERT(s2 < s1);

Convertendo objetos CString

Para obter informações sobre como converter objetos CString em outros tipos de cadeia de caracteres, consulte Como: converter entre vários tipos de cadeia de caracteres.

Usando CString com wcout

Para usar um CString com wcout, é necessário converter explicitamente o objeto em um const wchar_t*, conforme mostrado no exemplo a seguir:

CString cs("meow");

wcout << (const wchar_t*) cs << endl;

Sem a conversão, cs é tratado como um void* e wcout imprime o endereço do objeto. Esse comportamento é causado por interações sutis entre a dedução do argumento de modelo e a resolução de sobrecarga que estão corretas em si e em conformidade com o padrão C++.

Confira também

Cadeias de caracteres (ATL/MFC)
Classe CStringT
Especialização de modelo
Como converter entre diversos tipos de cadeias de caracteres