Dùng strcat()
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 17 trên 63.
Bạn đã học cách sao chép chuỗi bằng strcpy(), nhưng nếu muốn nối hai chuỗi với nhau thì sao? Đây gọi là nối chuỗi (concatenation), và C cung cấp hàm strcat() từ thư viện <string.h> để làm việc này.
Hàm (function) strcat() nối nội dung của một chuỗi vào cuối một chuỗi khác. Hàm nhận hai đối số: chuỗi đích (sẽ bị thay đổi) và chuỗi nguồn (sẽ được nối vào cuối).
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting hiện chứa "Hello World"Điều quan trọng là chuỗi đích có đủ chỗ để chứa cả nội dung ban đầu và nội dung mới được nối thêm. Hàm strcat() tìm ký tự kết thúc null trong chuỗi đích, xóa ký tự đó, sao chép chuỗi nguồn vào vị trí ấy rồi thêm một ký tự kết thúc null mới ở cuối cùng.
Đôi khi bạn cần nối một số (chẳng hạn như int) vào một chuỗi. Vì strcat() chỉ hoạt động với mảng ký tự, trước tiên bạn cần chuyển số đó thành chuỗi. Bạn có thể dùng sprintf() để làm việc này. Hàm này hoạt động giống như printf(), nhưng ghi kết quả đã định dạng vào một mảng ký tự thay vì in ra màn hình. sprintf() thuộc <stdio.h>, thư viện này đã được đưa vào hầu hết các chương trình C.
int n = 42;
char numStr[20];
sprintf(numStr, "%d", n); // numStr hiện chứa "42" dưới dạng chuỗi (string)Sau khi lưu số dưới dạng chuỗi trong numStr, bạn có thể dùng strcat() để nối nó vào một chuỗi khác như bình thường:
char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr); // summary hiện chứa "Total people processed: 3"Hàm này rất cần thiết để tạo chuỗi dài từ những phần nhỏ hơn, chẳng hạn như ghép các từ riêng lẻ thành câu hoàn chỉnh hoặc kết hợp đầu vào của người dùng với văn bản được định sẵn.
Thử thách
DễViết chương trình C minh họa cách nối chuỗi bằng hàm strcat() để tạo lời nhắn cá nhân hóa. Chương trình cần:
- Đọc một số nguyên
nbiểu thị số người cần xử lý - Với mỗi người:
- Đọc tên của họ từ đầu vào
- Đọc họ của họ từ đầu vào
- Tạo một mảng ký tự có tên
fullNamegồm 100 phần tử - Dùng
strcpy()để sao chép tên vàofullName - Dùng
strcat()để nối một dấu cách " " vàofullName - Dùng
strcat()để nối họ vàofullName - Tạo một mảng ký tự có tên
greetinggồm 150 phần tử - Dùng
strcpy()để sao chép "Hello, " vàogreeting - Dùng
strcat()để nốifullNamevàogreeting - Dùng
strcat()để nối "! Welcome to our program." vàogreeting - In lời chào cuối cùng
- Sau khi xử lý tất cả mọi người, tạo một lời nhắn tổng kết:
- Tạo một mảng ký tự có tên
summarygồm 100 phần tử - Dùng
strcpy()để sao chép "Total people processed: " vàosummary - Chuyển số
nthành chuỗi và dùngstrcat()để nối số đó vàosummary - In lời nhắn tổng kết
- Tạo một mảng ký tự có tên
Nhớ thêm tiêu đề <string.h> để sử dụng các hàm xử lý chuỗi.
Đầu ra của bạn cần hiển thị kết quả theo định dạng sau:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]Ví dụ, nếu đầu vào là:
2
John
Doe
Alice
SmithĐầu ra của bạn sẽ là:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2Thử thách này kiểm tra mức độ hiểu biết của bạn về cách dùng strcat() để nối nhiều chuỗi với nhau, kết hợp với strcpy() để thiết lập chuỗi ban đầu và từng bước tạo các chuỗi phức tạp từ nhiều thành phần.
Tự làm thử
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// Đọc số người
int n;
scanf("%d", &n);
// TODO: Viết code bên dưới
// Xử lý từng người và tạo lời chào
// Sau đó tạo và hiển thị thông báo tổng kết
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