Menu
CoddyTech

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.

challenge icon

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:

  1. Đọc một số nguyên n biểu thị số người cần xử lý
  2. 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 fullName gồm 100 phần tử
    • Dùng strcpy() để sao chép tên vào fullName
    • Dùng strcat() để nối một dấu cách " " vào fullName
    • Dùng strcat() để nối họ vào fullName
    • Tạo một mảng ký tự có tên greeting gồm 150 phần tử
    • Dùng strcpy() để sao chép "Hello, " vào greeting
    • Dùng strcat() để nối fullName vào greeting
    • Dùng strcat() để nối "! Welcome to our program." vào greeting
    • In lời chào cuối cùng
  3. 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 summary gồm 100 phần tử
    • Dùng strcpy() để sao chép "Total people processed: " vào summary
    • Chuyển số n thành chuỗi và dùng strcat() để nối số đó vào summary
    • In lời nhắn tổng kết

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: 2

Thử 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;
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch C online