Compartir a través de


Operaciones básicas de CString

En este tema se explican las siguientes operaciones básicas de CString:

Class CString se basa en la plantilla de clase CStringT Class. CString es un typedef de CStringT. Más exactamente, CString es un typedefde una especialización explícita de CStringT, que es una manera común de usar una plantilla de clase para definir una clase. De forma similar, las clases definidas son CStringA y CStringW.

CString, CStringA y CStringW se definen en atlstr.h. CStringT se define en cstringt.h.

CString, CStringA y CStringW cada uno obtiene un conjunto de los métodos y operadores definidos por CStringT para su uso con los datos de cadena que admiten. Algunos de los métodos duplican y, en algunos casos, superan los servicios de cadena de las bibliotecas en tiempo de ejecución de C.

Nota: CString es una clase nativa. Para una clase de cadena que se usa en un proyecto administrado de C++/CLI, use System.String.

Creación de objetos CString a partir de cadenas literales de C estándar

Se pueden asignar cadenas literales de estilo C a CString igual que puede asignar un objeto CString a otro.

  • Asigne el valor de una cadena literal de C a un objeto CString.

    CString myString = _T("This is a test");   
    
  • Asigne el valor de un CString a otro objeto CString.

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

    El contenido de un objeto CString se copia cuando se asigna un objeto CString a otro. Por lo tanto, las dos cadenas no comparten una referencia a los caracteres reales que componen la cadena. Para más información sobre cómo usar objetos CString como valores, consulte la Semántica de CString.

    Nota:

    Para escribir la aplicación de modo que se pueda compilar para Unicode o para ANSI, codifique las cadenas literales utilizando la macro _T. Para más información, consulte Compatibilidad con juegos de caracteres Unicode y Multibyte (MBCS).

Acceso a caracteres individuales en una CString

Puede tener acceso a caracteres individuales en un objeto CString mediante los métodos GetAt y SetAt. También se puede usar el elemento de matriz o subíndice, operador ( [ ] ) en lugar de GetAt para obtener caracteres individuales. (Esto se asemeja al acceso a los elementos de matriz por índice, como en cadenas de estilo C estándar). Los valores del índice para los caracteres CString se basan en cero.

Concatenar dos objetos CString

Para concatenar dos objetos CString, use los operadores de concatenación (+ o +=), como se indica a continuación.

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

Al menos un argumento para los operadores de concatenación (+ o +=) debe ser un objeto CString, pero se puede usar una cadena de caracteres constantes (por ejemplo "big") o un char (por ejemplo, 'x') para el otro argumento.

Comparación de objetos CString

El método Compare y el operador == para CString son equivalentes. Compare, operator==, y CompareNoCase son compatibles con MBCS y Unicode; CompareNoCase también distingue entre mayúsculas y minúsculas. El método Collate de CString distingue la configuración regional y suele ser más lento que Compare. Use Collate solo dónde debe cumplir las reglas de ordenación según lo especificado por la configuración regional actual.

En la tabla siguiente se muestran las funciones de comparación de CString disponibles y sus funciones Unicode/MBCS-portable equivalentes en la biblioteca en tiempo de ejecución de C.

Función CString Función MBCS Función unicode
Compare _mbscmp wcscmp
CompareNoCase _mbsicmp _wcsicmp
Collate _mbscoll wcscoll

La plantilla de clase CStringT define los operadores relacionales (<, <=, >=, > == y !=), que están disponibles para su uso por CString. Se pueden comparar dos CStrings mediante estos operadores, como se muestra en el ejemplo siguiente.

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

Conversión de objetos CString

Para obtener información sobre cómo convertir objetos CString en otros tipos de cadena, consulte Cómo convertir entre varios tipos de cadenas.

Uso de CString con wcout

Para usar un CString con wcout se debe convertir explícitamente el objeto en un const wchar_t*, como se muestra en el ejemplo siguiente:

CString cs("meow");

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

Sin la conversión, cs se trata como un void* y wcout imprime la dirección del objeto. Este comportamiento se debe a interacciones sutiles entre la deducción de argumentos de la plantilla y la resolución de sobrecarga que son correctas y conformes con el estándar de C++.

Consulte también

Cadenas (ATL/MFC)
CStringT (clase)
Especialización de plantilla
Procedimiento para convertir entre distintos tipos de cadenas