Bài tập C/C++ cho người mới

Đảo ngược chuỗi trong C, C++

Trong bài học này, bạn sẽ đảo ngược một chuỗi ngay trên chính vùng nhớ của nó bằng cách đổi chỗ các ký tự đối xứng.

Giới thiệu

Đảo ngược chuỗi là bài tập tốt để luyện cách dùng chỉ số và đổi chỗ phần tử ngay tại chỗ (in-place), tức là không cần tạo thêm chuỗi mới. Ý tưởng là đổi chỗ ký tự đầu với ký tự cuối, rồi tiến dần vào giữa.

Những điểm quan trọng

  • Luôn bật cảnh báo của trình biên dịch (compiler warning) và sửa hết các cảnh báo.
  • Hiểu rõ kiểu dữ liệu và thời gian tồn tại (lifetime) của từng giá trị.
  • Luôn kiểm tra dữ liệu đầu vào và giới hạn chỉ số của mảng.

Code ví dụ bằng C và C++

C
Chạy code →
main.c
#include <stdio.h>
#include <string.h>
int main(void) {
    char text[] = "CodeUtility"; size_t length = strlen(text);
    // Swap mirrored characters in place.
    for (size_t i = 0; i < length / 2; ++i) {
        char temporary = text[i]; text[i] = text[length - 1 - i]; text[length - 1 - i] = temporary;
    }
    puts(text);
}
Kết quả khi chạy
ytilitUedoC
C++
Chạy code →
main.cpp
#include <algorithm>
#include <iostream>
#include <string>
int main() {
    std::string text = "CodeUtility";
    // reverse applies swaps across the selected range.
    std::reverse(text.begin(), text.end());
    std::cout << text << '\n';
}
Kết quả khi chạy
ytilitUedoC

So sánh C và C++

Vòng lặp đổi chỗ text[i] với text[length - 1 - i] bằng một biến tạm temporary, cho đến khi hai vị trí gặp nhau ở giữa chuỗi. Lưu ý chuỗi phải được khai báo là mảng char text[] để có thể sửa đổi. Kết quả in ra là ytilitUedoC.

C

C dùng các hàm thủ tục gọn nhẹ và thể hiện rõ cách dữ liệu được biểu diễn trong bộ nhớ.

C++

C++ vẫn cho phép làm việc ở mức thấp nhưng bổ sung các kiểu dữ liệu thư viện và công cụ trừu tượng an toàn hơn.

Bài tập mở rộng

Hãy chạy cả hai phiên bản, sau đó thử thay đổi code để quan sát sự khác biệt về mức độ an toàn mà mỗi ngôn ngữ mang lại.

  • Thử nhập dữ liệu sai và các giá trị ở biên.
  • Biên dịch với các cờ -Wall -Wextra -Wpedantic để bật thêm cảnh báo.
  • Tách phần khai báo dùng chung ra file header và phần cài đặt ra file riêng.

Luyện tập với thử thách

Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.

Tất cả thử thách