Dẫn nhập
Ở bài học trước, mình đã chia sẻ cho các bạn về CÁC THAO TÁC TRÊN MẢNG 2 CHIỀU trong C++.
Hôm nay, mình sẽ giới thiệu cho các bạn về Mảng ký tự trong C++ [C-style strings].
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về:
- KIỂU KÝ TỰ TRONG C++ [Character]
- MẢNG 1 CHIỀU [Arrays]
Trong bài ta sẽ cùng tìm hiểu các vấn đề:
- Mảng ký tự [C-style strings] là gì?
- Khai báo và khởi tạo mảng ký tự [C-style strings]
- Xuất mảng ký tự [C-style strings] với std::cout
- Nhập mảng ký tự [C-style strings] với std::cin
Mảng ký tự [C-style strings] là gì?
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:
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
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
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