统计文本中某些词出现的次数
【问题描述】 文学研究人员需要统计某篇文章中某些词的出现次数。试写一个实现这一目标的文字统计系统 【任务要求】 文章存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数格式自行设计。 【测试数据】 与程序放在同一目录下的记事本文件xxx.txt,内容如下“某日,一个大学老师提问学生,树上有十只鸟,开枪打死一只,还剩几只?学生反问:是无声手枪吗?不是枪声有多大?80-100分贝。在这个城市打鸟犯不犯法?不犯。您确定那只鸟真的被打死了吗?确定。这时,老师已经不耐烦了:“,你告诉我还剩几只鸟就行了,OK?树上的鸟里有没有聋子?没有。有没有被关在笼子里挂在树上的?没有。边上有没有其他的树,树上还有没有其他的鸟?没有。如果有鸟怀孕了,算不算肚子里的小鸟?不算。 打鸟的人眼有没有花?没有花,就十只。老师已经是满头是汗,且下课铃响,但学生继续问:有没有傻得不怕死的鸟?都怕死。会不会一枪打死两只?不会。学生满怀信心地说:,如果您的回答没有骗人“打死的鸟要是挂在树上没有掉下来,那么就剩一只,如果掉下来,就一只不剩。老师当即口吐白沫倒在地上!” 统计文档中的“学生”出现的次数。 注:需要在创建的c文件目录下新建一个xxxx.txt文本内容为题目中的某日………..倒在地上!。 代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct { char str[5000]; int len; }CHUAN; int ReadText(CHUAN *s, char *filename)//读取同路径下的txt文本 { FILE *fp; char ch; long len; int i; fp = fopen(filename, "r"); if (!fp) { printf("读取失败 "); return 0; } fseek(fp, 0L, 2); len = ftell(fp); rewind(fp); i = 0; while (i<len) { ch = fgetc(fp); s->str[i] = ch; i++; } s->len = len; s->str[s->len] = ; fclose(fp); printf("读取成功 "); return 1; } void Count(CHUAN *s,CHUAN *s1,int *cnt)//查找输入的字符串s1出现的次数 { /*模式匹配算法*/ int i=0,j=0; while(i<s->len)//直到寻找完整个字符串 { if(s->str[i]==s1->str[j]) { i++;j++; if(j==s1->len)//j==s1->len时是匹配成功的时候 { (*cnt)++; j=0;//因为是统计个数,下次还要继续,所以置空继续寻找 } } else { i=i-j+1;//部分匹配不成功i返回到后一个单元继续循环匹配 j=0;//j置空 } } } int main() { int i,cnt=0; CHUAN *s,*s1; s=(CHUAN *)malloc(sizeof(CHUAN));//给指针分配个空间 s1=(CHUAN *)malloc(sizeof(CHUAN)); printf("输入统计的文字(如‘学生’):"); scanf("%s",s1->str); s1->len=strlen(s1->str); printf("文档读取中 "); ReadText(s, "xxxx.txt");//读取文本 Count(s,s1,&cnt); printf("学生出现的次数为:%d次 ",cnt); return 0; }
下一篇:
希尔排序实现详细(c语言实现)