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

【问题描述】
文学研究人员需要统计某篇文章中某些词的出现次数。试写一个实现这一目标的文字统计系统
【任务要求】
文章存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数格式自行设计。
【测试数据】
与程序放在同一目录下的记事本文件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;

}
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值