MFC - ciągi
Stringsto obiekty, które reprezentują ciągi znaków. Ciąg znaków w stylu C pochodzi z języka C i nadal jest obsługiwany w C ++.
- Ten ciąg jest w rzeczywistości jednowymiarową tablicą znaków zakończoną znakiem null „\ 0”. 
- Ciąg zakończony wartością null zawiera znaki, które składają się na ciąg, po którym następuje wartość null. 
Oto prosty przykład tablicy znaków.
char word[12] = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0' };Poniżej znajduje się inny sposób przedstawienia tego.
char word[] = "Hello, World";Biblioteka Microsoft Foundation Class (MFC) udostępnia klasę do manipulowania ciągiem znaków o nazwie CString. Oto kilka ważnych funkcji CString.
- CString nie ma klasy bazowej. 
- Obiekt CString składa się z sekwencji znaków o zmiennej długości. 
- CString udostępnia funkcje i operatory przy użyciu składni podobnej do składni Basic. 
- Operatory konkatenacji i porównania wraz z uproszczonym zarządzaniem pamięcią sprawiają, że obiekty CString są łatwiejsze w użyciu niż zwykłe tablice znaków. 
Oto konstruktor CString.
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | CString Konstruuje obiekty CString na różne sposoby | 
Oto lista metod tablicowych -
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | GetLength Zwraca liczbę znaków w obiekcie CString. | 
| 2 | IsEmpty Sprawdza, czy obiekt CString nie zawiera żadnych znaków. | 
| 3 | Empty Wymusza na łańcuchu zerową długość. | 
| 4 | GetAt Zwraca znak na określonej pozycji. | 
| 5 | SetAt Ustawia znak na określonej pozycji. | 
Oto lista metod porównawczych -
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | Compare Porównuje dwa ciągi (z uwzględnieniem wielkości liter). | 
| 2 | CompareNoCase Porównuje dwa ciągi (bez rozróżniania wielkości liter). | 
Oto lista metod ekstrakcji -
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | Mid Wyodrębnia środkową część ciągu (podobnie jak funkcja Basic MID $). | 
| 2 | Left Wyodrębnia lewą część ciągu (podobnie jak funkcja Basic LEFT $). | 
| 3 | Right Wyodrębnia prawą część ciągu (podobnie jak funkcja Basic RIGHT $). | 
| 4 | SpanIncluding Wyodrębnia znaki z ciągu, które znajdują się w podanym zestawie znaków. | 
| 5 | SpanExcluding Wyodrębnia znaki z ciągu, które nie znajdują się w podanym zestawie znaków. | 
Oto lista metod konwersji.
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | MakeUpper Konwertuje wszystkie znaki w tym ciągu na wielkie litery. | 
| 2 | MakeLower Konwertuje wszystkie znaki w tym ciągu na małe litery. | 
| 3 | MakeReverse Odwraca znaki w tym ciągu. | 
| 4 | Format Sformatuj ciąg tak, jak robi to sprintf. | 
| 5 | TrimLeft Przytnij wiodące znaki odstępu z ciągu. | 
| 6 | TrimRight Przycinaj końcowe znaki odstępu z ciągu. | 
Oto lista metod wyszukiwania.
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | Find Znajduje znak lub podciąg w większym ciągu. | 
| 2 | ReverseFind Znajduje znak w większym ciągu; zaczyna się od końca. | 
| 3 | FindOneOf Znajduje pierwszy pasujący znak z zestawu. | 
Oto lista metod dostępu do bufora.
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | GetBuffer Zwraca wskaźnik do znaków w CString. | 
| 2 | GetBufferSetLength Zwraca wskaźnik do znaków w CString, obcinając do określonej długości. | 
| 3 | ReleaseBuffer Zwalnia kontrolę nad buforem zwróconym przez GetBuffer | 
| 4 | FreeExtra Usuwa wszelkie narzuty tego obiektu ciągu, zwalniając dodatkową pamięć wcześniej przydzieloną do ciągu. | 
| 5 | LockBuffer Wyłącza zliczanie odwołań i chroni ciąg w buforze. | 
| 6 | UnlockBuffer Włącza zliczanie odwołań i zwalnia ciąg w buforze. | 
Oto lista metod specyficznych dla systemu Windows.
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | AllocSysString Przydziela BSTR z danych CString. | 
| 2 | SetSysString Ustawia istniejący obiekt BSTR z danymi z obiektu CString. | 
| 3 | LoadString Ładuje istniejący obiekt CString z zasobu Windows CE. | 
Poniżej przedstawiono różne operacje na obiektach CString -
Utwórz ciąg
Możesz utworzyć ciąg, używając literału ciągu lub tworząc wystąpienie klasy 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
}Gdy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
 
                Pusta struna
Możesz utworzyć pusty ciąg, używając literału pustego ciągu lub metody CString :: Empty (). Możesz również sprawdzić, czy ciąg jest pusty, czy nie, używając właściwości Boolean 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
}Kiedy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
 
                Konkatenacja ciągów
Aby połączyć dwa lub więcej ciągów, możesz użyć operatora + do połączenia dwóch ciągów lub metody 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
}Kiedy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
 
                Długość łańcucha
Aby znaleźć długość ciągu, możesz użyć metody CString :: GetLength (), która zwraca liczbę znaków w obiekcie 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
}Kiedy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
 
                Porównanie ciągów
Aby porównać dwie zmienne łańcuchowe, możesz użyć operatora ==
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
}Kiedy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
