MFC - Cuerdas

Stringsson objetos que representan secuencias de caracteres. La cadena de caracteres de estilo C se originó en el lenguaje C y sigue siendo compatible con C ++.

  • Esta cadena es en realidad una matriz unidimensional de caracteres que termina con un carácter nulo '\ 0'.

  • Una cadena terminada en nulo contiene los caracteres que componen la cadena seguidos de un nulo.

Aquí está el ejemplo simple de matriz de caracteres.

char word[12] = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0' };

Lo siguiente es otra forma de representarlo.

char word[] = "Hello, World";

La biblioteca Microsoft Foundation Class (MFC) proporciona una clase para manipular la cadena llamada CString. A continuación se muestran algunas características importantes de CString.

  • CString no tiene una clase base.

  • Un objeto CString consta de una secuencia de caracteres de longitud variable.

  • CString proporciona funciones y operadores que utilizan una sintaxis similar a la de Basic.

  • Los operadores de concatenación y comparación, junto con la administración de memoria simplificada, hacen que los objetos CString sean más fáciles de usar que las matrices de caracteres ordinarias.

Aquí está el constructor de CString.

No Señor. Método y descripción
1

CString

Construye objetos CString de varias formas

Aquí hay una lista de métodos de matriz:

No Señor. Método y descripción
1

GetLength

Devuelve el número de caracteres de un objeto CString.

2

IsEmpty

Comprueba si un objeto CString no contiene caracteres.

3

Empty

Obliga a una cadena a tener una longitud 0.

4

GetAt

Devuelve el carácter en una posición especificada.

5

SetAt

Establece un personaje en una posición específica.

Aquí hay una lista de métodos de comparación:

No Señor. Método y descripción
1

Compare

Compara dos cadenas (distingue entre mayúsculas y minúsculas).

2

CompareNoCase

Compara dos cadenas (no distingue entre mayúsculas y minúsculas).

Aquí hay una lista de métodos de extracción:

No Señor. Método y descripción
1

Mid

Extrae la parte media de una cadena (como la función Basic MID $).

2

Left

Extrae la parte izquierda de una cadena (como la función Basic LEFT $).

3

Right

Extrae la parte derecha de una cadena (como la función básica RIGHT $).

4

SpanIncluding

Extrae los caracteres de la cadena, que están en el juego de caracteres dado.

5

SpanExcluding

Extrae los caracteres de la cadena que no están en el juego de caracteres dado.

Aquí hay una lista de métodos de conversión.

No Señor. Método y descripción
1

MakeUpper

Convierte todos los caracteres de esta cadena en mayúsculas.

2

MakeLower

Convierte todos los caracteres de esta cadena en minúsculas.

3

MakeReverse

Invierte los caracteres de esta cadena.

4

Format

Formatee la cadena como lo hace sprintf.

5

TrimLeft

Recorte los primeros espacios en blanco de la cadena.

6

TrimRight

Recorte los caracteres de espacio en blanco finales de la cadena.

Aquí hay una lista de métodos de búsqueda.

No Señor. Método y descripción
1

Find

Busca un carácter o subcadena dentro de una cadena más grande.

2

ReverseFind

Encuentra un carácter dentro de una cadena más grande; comienza desde el final.

3

FindOneOf

Encuentra el primer personaje coincidente de un conjunto.

Aquí hay una lista de métodos de acceso al búfer.

No Señor. Método y descripción
1

GetBuffer

Devuelve un puntero a los caracteres de CString.

2

GetBufferSetLength

Devuelve un puntero a los caracteres en CString, truncando a la longitud especificada.

3

ReleaseBuffer

Libera el control del búfer devuelto por GetBuffer

4

FreeExtra

Elimina cualquier sobrecarga de este objeto de cadena al liberar cualquier memoria adicional previamente asignada a la cadena.

5

LockBuffer

Desactiva el recuento de referencias y protege la cadena en el búfer.

6

UnlockBuffer

Habilita el recuento de referencias y libera la cadena en el búfer.

Aquí hay una lista de métodos específicos de Windows.

No Señor. Método y descripción
1

AllocSysString

Asigna un BSTR de los datos de CString.

2

SetSysString

Establece un objeto BSTR existente con datos de un objeto CString.

3

LoadString

Carga un objeto CString existente desde un recurso de Windows CE.

A continuación se muestran las diferentes operaciones en objetos CString:

Crear cadena

Puede crear una cadena utilizando un literal de cadena o creando una instancia de la clase CString.

BOOL CMFCStringDemoDlg::OnInitDialog() {

   CDialogEx::OnInitDialog();

   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);         // Set big icon
   SetIcon(m_hIcon, FALSE);       // Set small icon

   CString string1 = _T("This is a string1");
   CString string2("This is a string2");

   m_strText.Append(string1 + L"\n");
   m_strText.Append(string2);

   UpdateData(FALSE);

   return TRUE; // return TRUE unless you set the focus to a control
}

Cuando se compile y ejecute el código anterior, verá el siguiente resultado.

Cuerda vacía

Puede crear una cadena vacía usando un literal de cadena vacía o usando el método CString :: Empty (). También puede verificar si una cadena está vacía o no usando la propiedad booleana isEmpty.

BOOL CMFCStringDemoDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);            // Set big icon
   SetIcon(m_hIcon, FALSE);           // Set small icon

   CString string1 = _T("");
   CString string2;
   string2.Empty();

   if(string1.IsEmpty())
      m_strText.Append(L"String1 is empty\n");
   else
      m_strText.Append(string1 + L"\n");
   
   if(string2.IsEmpty())
      m_strText.Append(L"String2 is empty");
   else
      m_strText.Append(string2);
   UpdateData(FALSE);
   return TRUE; // return TRUE unless you set the focus to a control
}

Cuando se compile y ejecute el código anterior, verá el siguiente resultado.

Concatenación de cadenas

Para concatenar dos o más cadenas, puede usar el operador + para concatenar dos cadenas o un método CString :: Append ().

BOOL CMFCStringDemoDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);              // Set big icon
   SetIcon(m_hIcon, FALSE);              // Set small icon

   //To concatenate two CString objects
   CString s1 = _T("This ");           // Cascading concatenation
   s1 += _T("is a ");
   CString s2 = _T("test");
   CString message = s1;
   message.Append(_T("big ") + s2);
   // Message contains "This is a big test".

   m_strText = L"message: " + message;

   UpdateData(FALSE);

   return TRUE; // return TRUE unless you set the focus to a control
}

Cuando se compile y ejecute el código anterior, verá el siguiente resultado.

Longitud de la cuerda

Para encontrar la longitud de la cadena, puede usar el método CString :: GetLength (), que devuelve el número de caracteres en un objeto CString.

BOOL CMFCStringDemoDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();
   
   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);              // Set big icon
   SetIcon(m_hIcon, FALSE);              // Set small icon

   CString string1 = _T("This is string 1");
   int length = string1.GetLength();
   CString strLen;

   strLen.Format(L"\nString1 contains %d characters", length);
   m_strText = string1 + strLen;

   UpdateData(FALSE);

   return TRUE; // return TRUE unless you set the focus to a control
}

Cuando se compile y ejecute el código anterior, verá el siguiente resultado.

Comparación de cadenas

Para comparar dos cadenas de variables puede usar == operador

BOOL CMFCStringDemoDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();
   
   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);            // Set big icon
   SetIcon(m_hIcon, FALSE);          // Set small icon

   CString string1 = _T("Hello");
   CString string2 = _T("World");

   CString string3 = _T("MFC Tutorial");
   CString string4 = _T("MFC Tutorial");

   if (string1 == string2)
      m_strText = "string1 and string1 are same\n";
   else
      m_strText = "string1 and string1 are not same\n";

   if (string3 == string4)
      m_strText += "string3 and string4 are same";
   else
      m_strText += "string3 and string4 are not same";

   UpdateData(FALSE);

   return TRUE; // return TRUE unless you set the focus to a control
}

Cuando se compile y ejecute el código anterior, verá el siguiente resultado.