复习:单词频率计数器
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 63 课,共 63 课。
挑战
简单编写一个 C 程序,实现词频计数器来分析文本输入。你的程序应该:
- 编写一个名为
countWordOccurrences的函数,该函数:- 接受两个
char*参数:sentence和targetWord - 返回一个整数,表示目标词在句子中出现的次数
- 使用循环逐个处理句子中的字符
- 使用空格作为分隔符来识别词语边界
- 从句子中提取每个词,并使用
strcmp()将其与目标词进行比较 - 统计完全匹配的次数(区分大小写)
- 接受两个
- 编写一个名为
extractWord的函数,该函数:- 接受一个
char*类型的句子、一个整数startIndex,以及一个char*类型的词语参数 - 返回一个整数,表示提取出的词语之后的索引
- 从
startIndex开始提取一个词,直到遇到空格或空终止符 - 将提取出的词语存储在
word参数中 - 添加一个空终止符,以完成提取的词语
- 接受一个
- 编写一个名为
analyzeText的函数,该函数:- 接受一个
char*类型的句子参数 - 返回一个整数,表示句子中的词语总数
- 通过识别空格作为分隔符来统计词语
- 正确处理多个连续空格(将它们视为一个分隔符)
- 接受一个
- 在 main 函数中:
- 声明一个大小为 200 的字符数组
inputSentence - 声明一个大小为 50 的字符数组
searchWord - 从输入中读取一个句子(可以包含由空格分隔的多个词语)
- 读取要搜索的目标词
- 调用
analyzeText函数,并严格按照以下格式打印词语总数:Total words: [count] - 调用
countWordOccurrences函数,并严格按照以下格式打印结果:Occurrences of '[searchWord]': [count] - 计算并打印词频百分比,保留 1 位小数,格式严格如下:
Frequency: [percentage]% - 确定并打印词频类别:
- 如果词频为 0.0%:打印
Category: Not found - 如果词频大于 0.0% 但小于 20.0%:打印
Category: Rare - 如果词频在 20.0% 到 50.0% 之间(含两端):打印
Category: Common - 如果词频大于 50.0%:打印
Category: Frequent
- 如果词频为 0.0%:打印
- 声明一个大小为 200 的字符数组
这个挑战将检验你对字符串操作、分词和文本处理的掌握程度。你将练习把句子拆分成单个词语、比较字符串以查找完全匹配项,以及实现多个协同分析文本数据的函数。这个程序展示了许多 C 应用所必需的真实文本处理技术。
亲手试试
#include <stdio.h>
#include <string.h>
// TODO: 在这里编写你的 extractWord 函数
// TODO: 在这里编写你的 countWordOccurrences 函数
// TODO: 在这里编写你的 analyzeText 函数
int main() {
char inputSentence[200];
char searchWord[50];
// 读取输入的句子
fgets(inputSentence, sizeof(inputSentence), stdin);
// 如果有换行符,就将其删除
inputSentence[strcspn(inputSentence, "\n")] = '\0';
// 读取要搜索的单词
scanf("%s", searchWord);
// TODO: 在下方编写你的代码
// 调用 analyzeText 函数并保存单词总数
// 调用 countWordOccurrences 函数并保存出现次数
// 计算出现频率的百分比
// 确定频率类别
// 按要求的格式输出结果
// 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;
}逻辑与流程中的所有课
自己练习: C 在线编译器