Menu
CoddyTech

Ôn tập: Nối chuỗi động

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 61 trên 63.

challenge icon

Thử thách

Dễ

Viết một chương trình C triển khai hàm nối chuỗi động để tạo tiện ích xử lý văn bản. Chương trình cần:

  1. Viết hàm có tên concatenateStrings để:
    • Nhận hai tham số char* có tên str1 và str2
    • Trả về char* trỏ đến một chuỗi được cấp phát động
    • Tính tổng bộ nhớ cần thiết cho cả hai chuỗi và ký tự kết thúc null
    • Dùng malloc() để cấp phát chính xác lượng bộ nhớ cần thiết
    • Kiểm tra xem việc cấp phát bộ nhớ có thành công không, nếu thất bại thì trả về NULL
    • Dùng strcpy() để sao chép chuỗi thứ nhất vào vùng nhớ đã cấp phát
    • Dùng strcat() để nối chuỗi thứ hai vào kết quả
    • Trả về con trỏ đến chuỗi đã nối vừa tạo
  2. Viết hàm có tên processText để:
    • Nhận ba tham số char*: word1, word2 và separator
    • Trả về char* trỏ đến một chuỗi được cấp phát động
    • Tạo chuỗi kết hợp theo định dạng: word1 + separator + word2
    • Gọi concatenateStrings trước để kết hợp word1 và separator
    • Sau đó gọi lại concatenateStrings để nối word2 vào kết quả
    • Giải phóng đúng cách mọi vùng nhớ được cấp phát tạm thời
    • Trả về kết quả đã nối cuối cùng
  3. Trong hàm main:
    • Khai báo ba mảng ký tự, mỗi mảng có kích thước 50: firstWord, secondWord và connector
    • Đọc ba chuỗi từ đầu vào, lần lượt là từ thứ nhất, từ thứ hai và chuỗi nối
    • Gọi hàm processText với ba chuỗi này
    • Kiểm tra xem con trỏ trả về có khác NULL không
    • Nếu thành công, in kết quả theo đúng định dạng này: Result: [concatenated_string]
    • Nếu cấp phát bộ nhớ thất bại, in: Memory allocation failed
    • Tính và in độ dài của chuỗi kết quả theo đúng định dạng này: Length: [length]
    • Giải phóng vùng nhớ được cấp phát động

Thử thách này kiểm tra khả năng sử dụng thành thạo việc cấp phát bộ nhớ động, các hàm thao tác chuỗi, giá trị con trỏ trả về và cách quản lý bộ nhớ đúng cách. Bạn sẽ luyện tính toán yêu cầu về bộ nhớ, dùng malloc() và free(), làm việc với nhiều hàm xử lý chuỗi và xử lý trường hợp cấp phát bộ nhớ thất bại. Thử thách minh họa cách cấp phát động cho phép các hàm tạo và trả về dữ liệu vẫn tồn tại sau khi ra khỏi phạm vi của chúng.

Tự làm thử

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO: Viết hàm concatenateStrings tại đây

// TODO: Viết hàm processText tại đây

int main() {
    // Đọc đầu vào
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO: Viết code bên dưới
    // Gọi hàm processText và xử lý kết quả
    
    return 0;
}

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