MFC - Stringhe

Stringssono oggetti che rappresentano sequenze di caratteri. La stringa di caratteri in stile C ha avuto origine nel linguaggio C e continua a essere supportata in C ++.

  • Questa stringa è in realtà un array unidimensionale di caratteri che termina con un carattere nullo "\ 0".

  • Una stringa con terminazione null contiene i caratteri che compongono la stringa seguita da un valore null.

Ecco il semplice esempio di array di caratteri.

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

Di seguito è un altro modo per rappresentarlo.

char word[] = "Hello, World";

La libreria Microsoft Foundation Class (MFC) fornisce una classe per manipolare la stringa chiamata CString. Di seguito sono riportate alcune importanti funzionalità di CString.

  • CString non ha una classe base.

  • Un oggetto CString è costituito da una sequenza di caratteri a lunghezza variabile.

  • CString fornisce funzioni e operatori utilizzando una sintassi simile a quella di Basic.

  • Gli operatori di concatenazione e confronto, insieme alla gestione semplificata della memoria, rendono gli oggetti CString più facili da usare rispetto ai normali array di caratteri.

Ecco il costruttore di CString.

Sr.No. Metodo e descrizione
1

CString

Costruisce oggetti CString in vari modi

Ecco un elenco di metodi di array:

Sr.No. Metodo e descrizione
1

GetLength

Restituisce il numero di caratteri in un oggetto CString.

2

IsEmpty

Verifica se un oggetto CString non contiene caratteri.

3

Empty

Forza una stringa di lunghezza pari a 0.

4

GetAt

Restituisce il carattere in una posizione specificata.

5

SetAt

Imposta un carattere in una posizione specificata.

Ecco un elenco di metodi di confronto:

Sr.No. Metodo e descrizione
1

Compare

Confronta due stringhe (distingue tra maiuscole e minuscole).

2

CompareNoCase

Confronta due stringhe (senza distinzione tra maiuscole e minuscole).

Ecco un elenco di metodi di estrazione:

Sr.No. Metodo e descrizione
1

Mid

Estrae la parte centrale di una stringa (come la funzione Basic MID $).

2

Left

Estrae la parte sinistra di una stringa (come la funzione $ SINISTRA di base).

3

Right

Estrae la parte destra di una stringa (come la funzione $ DESTRA di base).

4

SpanIncluding

Estrae i caratteri dalla stringa, che si trovano nel set di caratteri specificato.

5

SpanExcluding

Estrae i caratteri dalla stringa che non sono nel set di caratteri specificato.

Di seguito è riportato un elenco di metodi di conversione.

Sr.No. Metodo e descrizione
1

MakeUpper

Converte tutti i caratteri di questa stringa in caratteri maiuscoli.

2

MakeLower

Converte tutti i caratteri di questa stringa in caratteri minuscoli.

3

MakeReverse

Inverte i caratteri in questa stringa.

4

Format

Formatta la stringa come fa sprintf.

5

TrimLeft

Taglia i caratteri dello spazio bianco iniziale dalla stringa.

6

TrimRight

Taglia i caratteri di spazio vuoto finali dalla stringa.

Ecco un elenco di metodi di ricerca.

Sr.No. Metodo e descrizione
1

Find

Trova un carattere o una sottostringa all'interno di una stringa più grande.

2

ReverseFind

Trova un carattere all'interno di una stringa più grande; inizia dalla fine.

3

FindOneOf

Trova il primo carattere corrispondente da un set.

Ecco un elenco di metodi di accesso ai buffer.

Sr.No. Metodo e descrizione
1

GetBuffer

Restituisce un puntatore ai caratteri in CString.

2

GetBufferSetLength

Restituisce un puntatore ai caratteri nella CString, troncando alla lunghezza specificata.

3

ReleaseBuffer

Rilascia il controllo del buffer restituito da GetBuffer

4

FreeExtra

Rimuove qualsiasi overhead di questo oggetto stringa liberando la memoria aggiuntiva precedentemente allocata alla stringa.

5

LockBuffer

Disabilita il conteggio dei riferimenti e protegge la stringa nel buffer.

6

UnlockBuffer

Abilita il conteggio dei riferimenti e rilascia la stringa nel buffer.

Di seguito è riportato un elenco di metodi specifici per Windows.

Sr.No. Metodo e descrizione
1

AllocSysString

Alloca un BSTR dai dati CString.

2

SetSysString

Imposta un oggetto BSTR esistente con i dati di un oggetto CString.

3

LoadString

Carica un oggetto CString esistente da una risorsa Windows CE.

Di seguito sono riportate le diverse operazioni sugli oggetti CString:

Crea stringa

È possibile creare una stringa utilizzando un valore letterale stringa o creando un'istanza della classe 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
}

Quando il codice precedente viene compilato ed eseguito, vedrai il seguente output.

Stringa vuota

È possibile creare una stringa vuota utilizzando un valore letterale stringa vuoto o utilizzando il metodo CString :: Empty (). È inoltre possibile verificare se una stringa è vuota o meno utilizzando la proprietà 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
}

Quando il codice sopra è stato compilato ed eseguito, vedrai il seguente output.

Concatenazione di stringhe

Per concatenare due o più stringhe, è possibile utilizzare l'operatore + per concatenare due stringhe o un metodo 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
}

Quando il codice sopra è stato compilato ed eseguito, vedrai il seguente output.

Lunghezza della stringa

Per trovare la lunghezza della stringa è possibile utilizzare il metodo CString :: GetLength (), che restituisce il numero di caratteri in un oggetto 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
}

Quando il codice sopra è stato compilato ed eseguito, vedrai il seguente output.

Confronto tra stringhe

Per confrontare due variabili di stringa è possibile utilizzare l'operatore ==

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
}

Quando il codice sopra è stato compilato ed eseguito, vedrai il seguente output.