Trong bài học CƠ BẢN VỀ CHUỖI KÝ TỰ TRONG C++ [An introduction to std::string], bạn đã biết được chuỗi ký tự là tập hợp các ký tự tuần tự, được đặt trong dấu ngoặc kép. Dùng để biểu diễn những thông báo, văn bản, … trong chương trình.
Ví dụ: "Hello, HowKteam.com!" chính là một chuỗi ký tự.
Ngôn ngữ C++ có 2 loại chuỗi ký tự khác nhau:
- Chuỗi ký tự std::string được cài đặt trong một lớp của thư viện chuẩn STL.
- Chuỗi ký tự C-style nguyên bản từ ngôn ngữ C.
Kiểu chuỗi ký tự std::string được xây dựng từ chuỗi ký tự C-style. Vì vậy, chuỗi ký tự std::string thường được sử dụng trong C++ vì tính đơn giản, và dễ sử dụng của nó.
Trong bài học này, chúng ta sẽ tìm hiểu bản chất và cách sử dụng của kiểu C-style strings.
Chuỗi ký tự C-style bản chất là mảng 1 chiều các ký tự, kết thúc bằng ký tự ‘\0’ [null]. Hay còn gọi là null-terminated string.
Ví dụ:
char sz[] = "Kteam";
Hình bên dưới mô tả 1 C-style string tên là sz có kiểu char gồm 6 phần tử [5 ký tự thường, và 1 ký tự null ‘\0’] nằm trong vùng nhớ RAM:
_Howkteam_com.png]
Chuỗi ký tự sz được khởi tạo 5 phần tử, nhưng chuỗi ký tự C-style luôn mặc định kết thúc bằng ký tự null ‘\0’, nên chuỗi sz sẽ có 6 phần tử.
Khai báo và khởi tạo mảng ký tự [C-style strings]
Khai báo mảng ký tự [C-style strings]
Cú pháp khai báo tương tự như cách khai báo mảng 1 chiều.
Ví dụ:
char szFullName[30]; // Dài 29 ký tự
char szDayOfBirth[9]; // Dài 8 ký tự
Chú ý: Mảng ký tự kết thúc bằng ký tự ‘\0’ [null] => độ dài chuỗi = kích thước mảng – 1
Khởi tạo giá trị cho mảng ký tự [C-style strings]
Cách 1: Khởi tạo với độ dài cụ thể.
char sz[10] = { 'K', 't', 'e', 'a', 'm', '\0' };
char sz[10] = "Kteam"; // Tự động thêm '\0' vào cuối chuỗi
_Howkteam_com.png]
Cách 2: Khởi tạo tự động xác định độ dài.
char sz[] = { 'K', 't', 'e', 'a', 'm', '\0' };
char sz[] = "Kteam"; // Tự động thêm '\0' vào cuối chuỗi
_Howkteam_com.png]
Bản chất của mảng ký tự cũng là mảng 1 chiều, nghĩa là bạn có khởi tạo chuỗi ký tự, nhưng bạn không thể gán chuỗi ký tự trực tiếp cho nó.
Ví dụ các phép gán hợp lệ:
char sz[] = "Kteam"; // Tự động thêm '\0' vào cuối chuỗi
sz[0] = 'F';
sz[1] = 'r';
sz[2] = 'e';
sz[3] = 'e';
sz[4] = 'E';
Ví dụ các phép gán KHÔNG hợp lệ:
char sz[] = "Kteam"; // Tự động thêm '\0' vào cuối chuỗi
sz = "FreeE"; // Lỗi, không được gán trực tiếp
Xuất mảng ký tự [C-style strings] với std::cout
Không giống như mảng 1 chiều thông thường cần sử dụng vòng lặp để xuất từng phần tử, mảng ký tự cho phép sử dụng đối tượng std::cout để in toàn bộ ký tự ra màn hình.
Khi in mảng ký tự [C-style strings], đối tượng std::cout sẽ in tất cả ký tự cho đến khi gặp ký tự ‘\0’ [null].
Ví dụ:
`
include
using namespace std; int main[] { // 0 1 2 3 4 5 // K t e a m \0 char szKteam[] = "Kteam"; cout