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.