Ô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.
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:
- Viết một hàm tên là
countWordOccurrencesđể:- Nhận hai tham số
char*:sentencevà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
- Nhận hai tham số
- Viết một hàm tên là
extractWordđể:- Nhận tham số câu
char*, một số nguyênstartIndexvà 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ừ
startIndexcho đế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
- Nhận tham số câu
- 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
- Nhận tham số câu
- Trong hàm main:
- Khai báo mảng ký tự
inputSentencecó kích thước 200 - Khai báo mảng ký tự
searchWordcó 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
analyzeTextvà in tổng số từ theo chính xác định dạng này:Total words: [count] - Gọi hàm
countWordOccurrencesvà 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
- Nếu tần suất là 0.0%: in
- Khai báo mảng ký tự
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
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online