Chuỗi dưới dạng mảng char
Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 12 trên 63.
Trong C, không có kiểu dữ liệu chuỗi tích hợp sẵn như bạn có thể thấy trong các ngôn ngữ lập trình khác. Thay vào đó, chuỗi được biểu diễn dưới dạng mảng ký tự. Đây là khái niệm nền tảng, rất cần thiết để hiểu cách xử lý văn bản trong lập trình C.
Chuỗi (string) trong C đơn giản là một dãy ký tự (character) được lưu ở các vị trí bộ nhớ liên tiếp. Để tạo một chuỗi, bạn khai báo một mảng (array) ký tự đủ lớn để chứa tất cả ký tự cần dùng, cộng thêm một vị trí để lưu ký tự kết thúc đặc biệt.
char greeting[6]; // Chứa được 5 ký tự (character) + ký tự kết thúc
char message[20]; // Chứa được tối đa 19 ký tự + ký tự kết thúcCách thuận tiện nhất để làm việc với chuỗi là khởi tạo chúng trực tiếp bằng một giá trị chuỗi cố định khi khai báo mảng. C tự động xử lý các chi tiết lưu từng ký tự trong mảng:
char greeting[6] = "Hello";
// Mảng này lưu: 'H', 'e', 'l', 'l', 'o' và một ký tự kết thúc đặc biệtBạn cũng có thể để C tự xác định kích thước mảng bằng cách bỏ qua phần khai báo kích thước khi khởi tạo bằng một chuỗi ký tự:
char greeting[] = "Hello"; // C tự động đặt kích thước này là 6Hiểu rằng chuỗi là mảng ký tự rất quan trọng vì điều đó giúp bạn biết cách C xử lý dữ liệu văn bản và chuẩn bị cho bạn sử dụng các hàm thao tác chuỗi hoạt động trên những mảng ký tự này.
Thử thách
DễViết một chương trình C minh họa cách tạo và sử dụng mảng ký tự để lưu trữ chuỗi. Chương trình của bạn cần:
- Khai báo một mảng ký tự tên là
greetingcó đủ chỗ để chứa chuỗi "Hello" (nhớ tính cả ký tự kết thúc null) - Khởi tạo mảng
greetingbằng chuỗi ký tự "Hello" - Khai báo mảng ký tự thứ hai tên là
messagegồm 20 phần tử - Khởi tạo mảng
messagebằng chuỗi ký tự "Welcome" - Khai báo mảng ký tự thứ ba tên là
wordmà không chỉ định kích thước, rồi để C tự xác định kích thước bằng cách khởi tạo mảng với "Programming" - In cả ba chuỗi bằng
printfvới chỉ định định dạng%s - In kích thước của từng mảng bằng
sizeofđể minh họa lượng bộ nhớ mà mỗi mảng ký tự chiếm dụng
Đầu ra của bạn cần hiển thị kết quả theo định dạng sau:
greeting: Hello
message: Welcome
word: Programming
Size of greeting: 6
Size of message: 20
Size of word: 12Thử thách này kiểm tra mức độ hiểu biết của bạn về cách khai báo mảng ký tự để lưu trữ chuỗi, cách các chuỗi ký tự tự động được kết thúc bằng ký tự null khi gán cho mảng ký tự, và cách C tự động tính kích thước mảng khi bạn bỏ qua phần chỉ định kích thước trong lúc khởi tạo.
Tự làm thử
#include <stdio.h>
int main() {
// TODO: Viết code của bạn tại đây
// Khai báo và khởi tạo các mảng ký tự (character arrays) theo yêu cầu của thử thách
// In ra các chuỗi (strings) và kích thước của chúng
printf("greeting: %s\n", greeting);
printf("message: %s\n", message);
printf("word: %s\n", word);
printf("Size of greeting: %lu\n", sizeof(greeting));
printf("Size of message: %lu\n", sizeof(message));
printf("Size of word: %lu\n", sizeof(word));
return 0;
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online