Menu
CoddyTech

Ôn tập: Bộ đếm tần suất từ

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

challenge icon

Thử thách

Dễ

Tạo một chương trình C triển khai bộ đếm tần suất từ để phân tích văn bản đầu vào. Chương trình của bạn cần:

  1. Viết một hàm tên là countWordOccurrences để:
    • Nhận hai tham số char*: sentence và targetWord
    • Trả về một số nguyên biểu thị số lần từ mục tiêu xuất hiện trong câu
    • Dùng vòng lặp để xử lý từng ký tự trong câu
    • Xác định ranh giới từ bằng cách dùng dấu cách làm dấu phân cách
    • Trích xuất từng từ trong câu và so sánh với từ mục tiêu bằng strcmp()
    • Đếm các kết quả khớp chính xác, có phân biệt chữ hoa chữ thường
  2. Viết một hàm tên là extractWord để:
    • Nhận tham số câu char*, một số nguyên startIndex và tham số từ char*
    • Trả về một số nguyên biểu thị chỉ số ngay sau từ được trích xuất
    • Trích xuất một từ bắt đầu từ startIndex cho đến khi gặp dấu cách hoặc ký tự kết thúc chuỗi
    • Lưu từ được trích xuất vào tham số word
    • Thêm ký tự kết thúc chuỗi để hoàn tất từ được trích xuất
  3. Viết một hàm tên là analyzeText để:
    • Nhận tham số câu char*
    • Trả về một số nguyên biểu thị tổng số từ trong câu
    • Đếm từ bằng cách xác định dấu cách làm dấu phân cách
    • Xử lý chính xác nhiều dấu cách liên tiếp, xem chúng như một dấu phân cách
  4. Trong hàm main:
    • Khai báo mảng ký tự inputSentence có kích thước 200
    • Khai báo mảng ký tự searchWord có kích thước 50
    • Đọc một câu từ đầu vào, câu có thể chứa nhiều từ được phân cách bằng dấu cách
    • Đọc một từ mục tiêu cần tìm
    • Gọi hàm analyzeText và in tổng số từ theo chính xác định dạng này: Total words: [count]
    • Gọi hàm countWordOccurrences và in kết quả theo chính xác định dạng này: Occurrences of '[searchWord]': [count]
    • Tính và in tần suất từ dưới dạng phần trăm, với đúng 1 chữ số thập phân, theo chính xác định dạng này: Frequency: [percentage]%
    • Xác định và in nhóm tần suất:
      • Nếu tần suất là 0.0%: in Category: Not found
      • Nếu tần suất lớn hơn 0.0% nhưng nhỏ hơn 20.0%: in Category: Rare
      • Nếu tần suất nằm trong khoảng từ 20.0% đến 50.0%, kể cả hai giá trị này: in Category: Common
      • Nếu tần suất lớn hơn 50.0%: in Category: Frequent

Thử thách này kiểm tra khả năng sử dụng thành thạo thao tác với chuỗi, tách từ và xử lý văn bản của bạn. Bạn sẽ luyện tập cách tách câu thành từng từ, so sánh chuỗi để tìm kết quả khớp chính xác và triển khai nhiều hàm phối hợp với nhau để phân tích dữ liệu văn bản. Chương trình minh họa các kỹ thuật xử lý văn bản thực tế, cần thiết cho nhiều ứng dụng C.

Tự làm thử

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

// TODO: Viết hàm (function) extractWord tại đây

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

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

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // Đọc câu đầu vào
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // Xóa ký tự xuống dòng nếu có
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // Đọc từ cần tìm
    scanf("%s", searchWord);
    
    // TODO: Viết code bên dưới
    // Gọi hàm analyzeText và lưu tổng số từ
    // Gọi hàm countWordOccurrences và lưu số lần xuất hiện
    // Tính tỷ lệ phần trăm tần suất
    // Xác định mức tần suất
    
    // In kết quả theo định dạng yêu cầu
    // printf("Total words: %d\n", totalWords);
    // printf("Occurrences of '%s': %d\n", searchWord, occurrences);
    // printf("Frequency: %.1f%%\n", frequency);
    // printf("Category: %s\n", category);
    
    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