编写一个程序.功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数.
最佳回答
最新回答共有2条回答
-
2026-04-07 18:11:55聪慧的海燕
回复刚用C语言写的,功能实现,但有很多可以优化的地方,自己改吧,不明白的再问:#include <stdio。h>#include <string。h>//能统计的最大单词个数,可以自己改#define MAX_WORD_COUNT 500//结构体,保存每个单词及对应的个数typedef struct WordCount { char cWord[20]; int iCount;}T_WordCount; int CalcEachWord(const char *pText);//计算单词个数及输出信息等void LowerText(char *pText);//把单词变成小写形式void SwapItem(T_WordCount *ItemA, T_WordCount * ItemB);//交换两个元素void SortWord(T_WordCount *pWordSet);//排序 int main(int argc, char *argv[]){ //测试文本 char pText[] ="Text HAs HAS ONE h-as MOrE Has MORE ha-S BLANk more blank or more oR blank Between wor-ds。"; printf("The text is :\n"); printf("----------------------------------\n"); printf("%s\n", pText); printf("----------------------------------\n"); printf("The top 5 words is :\n"); CalcEachWord(pText); return 0;} int CalcEachWord(const char *pText){ char cTmp[20] = {0}; int i = 0; char *pTmp = cTmp; int iFlag = 0; T_WordCount tWordSet[MAX_WORD_COUNT]; memset(tWordSet, 0, sizeof(tWordSet)); while (*pText != '\0') { if ((*pText >= 'A' && *pText <= 'Z') || (*pText >= 'a' && *pText <= 'z')) { *pTmp = *pText; pTmp++; } else if (*pText == '-') { ++pText; continue; } else { if (strlen(cTmp) > 0) { LowerText(cTmp); iFlag = 0; for (i = 0; i < MAX_WORD_COUNT; ++i) { if (strlen(tWordSet[i]。cWord) > 0) { if (strcmp(tWordSet[i]。cWord, cTmp) == 0) { iFlag = 1; tWordSet[i]。iCount++; break; } } else { strcpy(tWordSet[i]。cWord, cTmp); tWordSet[i]。iCount = 1; iFlag = 1; break; } } if (!iFlag) { printf("No more space to save word。\n"); } } memset(cTmp, 0, 20); pTmp = cTmp; } ++pText; } //排序 SortWord(tWordSet); for (i = 0; i < 5; ++i) { if (strlen(tWordSet[i]。cWord) > 0) { printf("%s:%d\n",tWordSet[i]。cWord,tWordSet[i]。iCount); } } return 0;} void LowerText(char *pText){ char *pTmp = pText; while (*pTmp != '\0') { if ((*pTmp >= 'A' && *pTmp <= 'Z')) { *pTmp += 32 ; } pTmp++; }} void SwapItem(T_WordCount *ItemA, T_WordCount * ItemB){ T_WordCount Tmp; memset(&Tmp, 0, sizeof(T_WordCount)); strcpy(Tmp。cWord, ItemA->cWord); Tmp。iCount = ItemA->iCount; strcpy(ItemA->cWord, ItemB->cWord); ItemA->iCount = ItemB->iCount; strcpy(ItemB->cWord, Tmp。cWord); ItemB->iCount = Tmp。iCount;}//冒泡排序算法void SortWord(T_WordCount *pWordSet){ int i,j; for (j = 0; j < MAX_WORD_COUNT - 1; j++) { for (i = 0; i < MAX_WORD_COUNT - 1 - j; i++) { if (pWordSet[i]。iCount < pWordSet[i+1]。iCount) { SwapItem(&pWordSet[i], &pWordSet[i+1]); } } }}测试结果截图: 再问: 太感谢了!!!怎么调用文件? 再答: 把文件读取到一个缓冲区里面,把缓冲区的指针传给CalcEachWord函数就可以了。 比如: FILE *fp=NULL; fp=fopen("d:\\text。txt","r+"); if(NULL == fp) { return -1; } char cBuf[1001]={0}; fread(cBuf, 1, 1000,fp); CalcEachWord(cBuf); cBuf的大小也可以根据文件大小动态分配。再问: 我还是不太明白。就是我的一个文件的根目录已知,然后怎么样。我们没有学调用函数 再答: fp=fopen("d:\\text。txt","r+");这句就是打开你要读的文件,d:\\text。txt,换成你自己的文件就可以了。再问: 谢谢你,非常感谢
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
