MFC - Chuỗi

Stringslà các đối tượng biểu diễn chuỗi các ký tự. Chuỗi ký tự kiểu C bắt nguồn từ ngôn ngữ C và tiếp tục được hỗ trợ trong C ++.

  • Chuỗi này thực sự là một mảng một chiều các ký tự được kết thúc bằng một ký tự rỗng '\ 0'.

  • Chuỗi được kết thúc bằng null chứa các ký tự bao gồm chuỗi theo sau là null.

Đây là ví dụ đơn giản về mảng ký tự.

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

Sau đây là một cách khác để biểu diễn nó.

char word[] = "Hello, World";

Thư viện Microsoft Foundation Class (MFC) cung cấp một lớp để thao tác với chuỗi được gọi là CString. Sau đây là một số tính năng quan trọng của CString.

  • CString không có lớp cơ sở.

  • Đối tượng CString bao gồm một chuỗi ký tự có độ dài thay đổi.

  • CString cung cấp các hàm và toán tử sử dụng cú pháp tương tự như cú pháp của Basic.

  • Các toán tử nối và so sánh, cùng với việc quản lý bộ nhớ được đơn giản hóa, làm cho các đối tượng CString dễ sử dụng hơn các mảng ký tự thông thường.

Đây là hàm tạo của CString.

Sr.No. Phương pháp & Mô tả
1

CString

Xây dựng các đối tượng CString theo nhiều cách khác nhau

Đây là danh sách các Phương thức Mảng -

Sr.No. Phương pháp & Mô tả
1

GetLength

Trả về số ký tự trong đối tượng CString.

2

IsEmpty

Kiểm tra xem một đối tượng CString không chứa ký tự nào.

3

Empty

Buộc một chuỗi có độ dài bằng 0.

4

GetAt

Trả về ký tự tại một vị trí được chỉ định.

5

SetAt

Đặt một ký tự ở một vị trí được chỉ định.

Đây là danh sách các phương pháp so sánh -

Sr.No. Phương pháp & Mô tả
1

Compare

So sánh hai chuỗi (phân biệt chữ hoa chữ thường).

2

CompareNoCase

So sánh hai chuỗi (không phân biệt chữ hoa chữ thường).

Đây là danh sách các phương pháp trích xuất -

Sr.No. Phương pháp & Mô tả
1

Mid

Trích xuất phần giữa của một chuỗi (như hàm MID $ cơ bản).

2

Left

Trích xuất phần bên trái của một chuỗi (như hàm Basic LEFT $).

3

Right

Trích xuất phần bên phải của một chuỗi (như hàm Basic RIGHT $).

4

SpanIncluding

Trích xuất các ký tự từ chuỗi nằm trong bộ ký tự đã cho.

5

SpanExcluding

Trích xuất các ký tự từ chuỗi không có trong bộ ký tự đã cho.

Đây là danh sách các phương pháp chuyển đổi.

Sr.No. Phương pháp & Mô tả
1

MakeUpper

Chuyển đổi tất cả các ký tự trong chuỗi này thành các ký tự viết hoa.

2

MakeLower

Chuyển đổi tất cả các ký tự trong chuỗi này thành các ký tự viết thường.

3

MakeReverse

Đảo ngược các ký tự trong chuỗi này.

4

Format

Định dạng chuỗi như sprintf.

5

TrimLeft

Cắt các ký tự khoảng trắng ở đầu chuỗi.

6

TrimRight

Cắt các ký tự khoảng trắng theo sau khỏi chuỗi.

Đây là danh sách các Phương pháp Tìm kiếm.

Sr.No. Phương pháp & Mô tả
1

Find

Tìm một ký tự hoặc chuỗi con bên trong một chuỗi lớn hơn.

2

ReverseFind

Tìm một ký tự bên trong một chuỗi lớn hơn; bắt đầu từ cuối.

3

FindOneOf

Tìm ký tự phù hợp đầu tiên từ một tập hợp.

Đây là danh sách các Phương pháp Truy cập Bộ đệm.

Sr.No. Phương pháp & Mô tả
1

GetBuffer

Trả về một con trỏ đến các ký tự trong CString.

2

GetBufferSetLength

Trả về một con trỏ đến các ký tự trong CString, cắt bớt theo độ dài được chỉ định.

3

ReleaseBuffer

Giải phóng quyền kiểm soát bộ đệm do GetBuffer trả về

4

FreeExtra

Loại bỏ bất kỳ chi phí nào của đối tượng chuỗi này bằng cách giải phóng bất kỳ bộ nhớ bổ sung nào đã được cấp phát trước đó cho chuỗi.

5

LockBuffer

Tắt tính năng đếm tham chiếu và bảo vệ chuỗi trong bộ đệm.

6

UnlockBuffer

Cho phép đếm tham chiếu và giải phóng chuỗi trong bộ đệm.

Đây là danh sách các Phương pháp dành riêng cho Windows.

Sr.No. Phương pháp & Mô tả
1

AllocSysString

Phân bổ BSTR từ dữ liệu CString.

2

SetSysString

Đặt đối tượng BSTR hiện có với dữ liệu từ đối tượng CString.

3

LoadString

Tải đối tượng CString hiện có từ tài nguyên Windows CE.

Sau đây là các hoạt động khác nhau trên các đối tượng CString:

Tạo chuỗi

Bạn có thể tạo một chuỗi bằng cách sử dụng một chuỗi ký tự hoặc tạo một thể hiện của lớp 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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau.

Chuỗi trống

Bạn có thể tạo một chuỗi trống bằng cách sử dụng một chuỗi rỗng theo nghĩa đen hoặc bằng cách sử dụng phương thức CString :: Empty (). Bạn cũng có thể kiểm tra xem một chuỗi có trống hay không bằng cách sử dụng thuộc tính 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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau.

Kết nối chuỗi

Để nối hai hoặc nhiều chuỗi, bạn có thể sử dụng toán tử + để nối hai chuỗi hoặc phương thức 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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau.

Chiều dài chuỗi

Để tìm độ dài của chuỗi, bạn có thể sử dụng phương thức CString :: GetLength (), trả về số ký tự trong một đối tượng 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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau.

So sánh chuỗi

Để so sánh hai biến chuỗi, bạn có thể sử dụng toán tử ==

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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau.