统计文本中某些词出现的次数

来源:互联网 发布:四剑圣2.6优化版攻略 编辑:程序博客网 时间:2024/06/06 20:13

【问题描述】
文学研究人员需要统计某篇文章中某些词的出现次数。试写一个实现这一目标的文字统计系统
【任务要求】
文章存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数格式自行设计。
【测试数据】
与程序放在同一目录下的记事本文件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("读取失败\n"); 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] = '\0';    fclose(fp);    printf("读取成功\n");    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("文档读取中\n");    ReadText(s, "xxxx.txt");//读取文本        Count(s,s1,&cnt);    printf("'学生'出现的次数为:%d次\n",cnt);    return 0;}
阅读全文
1 0
原创粉丝点击