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 objetoCString
.CString oldString = _T("This is a test"); CString newString = oldString;
O conteúdo de um objeto
CString
é copiado quando um objetoCString
é 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 objetosCString
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