快捷搜索: 王者荣耀 脱发

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

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

}
经验分享 程序员 微信小程序 职场和发展