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

Đếm số từ trong câu bằng C, C++

Trong bài học này, bạn sẽ đếm số từ được ngăn cách bởi khoảng trắng trong một câu bằng cách theo dõi trạng thái khi duyệt chuỗi.

Giới thiệu

Một cách đếm từ đáng tin cậy là theo dõi xem chương trình đang ở bên trong một từ hay đang ở khoảng trắng. Mỗi khi chuyển từ khoảng trắng sang một ký tự không phải khoảng trắng, nghĩa là một từ mới vừa bắt đầu. Cách này xử lý đúng cả khi có nhiều khoảng trắng liền nhau.

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 <ctype.h>
#include <stdio.h>
int main(void) {
    const char *text = "C and C++ examples"; int words = 0, inside = 0;
    // Count transitions from whitespace into a word.
    for (; *text; ++text) { if (isspace((unsigned char)*text)) inside = 0; else if (!inside) { ++words; inside = 1; } }
    printf("words=%d\n", words);
}
Kết quả khi chạy
words=4
C++
Chạy code →
main.cpp
#include <iostream>
#include <sstream>
#include <string>
int main() {
    std::istringstream input("C and C++ examples"); std::string word; int words = 0;
    // Formatted extraction skips whitespace and returns one word.
    while (input >> word) ++words;
    std::cout << "words=" << words << '\n';
}
Kết quả khi chạy
words=4

So sánh C và C++

Biến inside cho biết vị trí hiện tại có nằm trong một từ hay không. Khi gặp khoảng trắng (kiểm tra bằng isspace), inside được đặt về 0. Khi gặp ký tự khác mà inside đang là 0, chương trình tăng bộ đếm words và đặt inside = 1. Câu "C and C++ examples" có 4 từ.

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