| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1138 人关注过本帖
标题:C语言编写,统计文件中的单词出现频率,结果是逐个输出单词,并输出这个单词 ...
取消只看楼主 加入收藏
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
结帖率:96.23%
收藏
已结贴  问题点数:20 回复次数:4 
C语言编写,统计文件中的单词出现频率,结果是逐个输出单词,并输出这个单词的出现频率。求改错。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max_word_number 10000000
#define Max_word 100
struct Word                     //结构体中包括单词,还有这个单词在文件中出现的频率和次数
{
     float frequency;
     char word[100];
     int frequenct;
};
int main(int argc, char *argv[])
{
  FILE *p;
  if(argc<2)
    {
      printf(" can not open this file.\n");
      exit(0);
    }
  else
    { char *filename;
      filename=argv[1];
      p=fopen(filename,"r");
    }
  struct Word WORD[Max_word_number];
  char words[Max_word_number][Max_word]; //这个数组用来存储文件中出现的单词,但是不包括重复的
  char awords[Max_word_number][100]; //这个数组用来存储文件中的所有单词,包括重复出现的
  char word[Max_word]; //存储每个单词
  char op;
  int i=0,j=0,t=0,sum=0,k=0;//SUM 是用来统计总共的单词数(包括重复), K 是不包括重复的单词数。
  op=fgetc(p);
  while(op!=EOF)
    {
      if(isalpha(op))
        word[i++]=op; //遇到字母就把字母存储到word数组中
      else
       { word[i]='\0';//如果遇到的不是字母,结束这个数组
         if(i!=0)
        { sum++;//单词的总个数,包括重复的
          strcpy(awords[t++],word);//将这个单词拷贝到二维数组awords中
     for(i=0;i<Max_word_number;++i)
      {
         if(strcmp(word,words[i])==0) //这个for循环判断这个单词在不在已经输入的单词中
         { j=1;
          break;
         }
      }
     if(j!=1)//如果这个单词没有出现过,就将这个单词拷贝到二维数组words中。
     {
       strcpy(words[k],word);
        k++;
     }
     }
      i=0;//将I 的值重新赋为0,继续while循环的计算。
    }
   }
  for(i=0;i<k;i++)
  {
      strcpy(WORD[i].word,words[i]);//将没有重复出现的单词逐个拷贝到结构体数组中
  }
  for(i=0;i<sum;i++)
  {
      for(j=0;i<k;j++)
      {
          if(strcmp(WORD[j].word,awords[i])==0)//计算结构体中单词在文件中出现的次数
              WORD[j].frequenct++;
      }
  }
  for(i=0;i<k;++i)
  {
      WORD[j].frequency=WORD[j].frequenct/sum;//用得到的次数计算频率
  }
  for(i=0;i<k;++i)//输出每个单词和这个单词对应的频率
  {
      printf("%s \n",WORD[i].word);
      printf("%f \n",WORD[i].frequency);
  }
   return 0;
}
结果是 Segmentation fault

[ 本帖最后由 fl8962 于 2014-1-25 04:40 编辑 ]
搜索更多相关主题的帖子: 单词 结构体 C语言 include frequency 
2014-01-25 04:35
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 2楼 zklhp
对啊,我是求改错啊,我说了是用c语言编写

想抽苏烟了。
2014-01-25 14:51
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 6楼 蚕头燕尾
代码是我自己写的,输出文件中的每一个不重复单词,并且还输出每个单词出现的频率。文件名在运行程序的时候一起在终端输入,比如./count text.txt   回车

想抽苏烟了。
2014-01-26 17:41
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 3楼 fl8962
求大侠详细指点。

想抽苏烟了。
2014-01-26 17:43
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 5楼 zklhp
我知道这是c++版块,我一直用c++做练习,但是这个学期刚开c语言课,我按照我课后题改的一个题目。真心请您们指点一下我是哪里错了。

想抽苏烟了。
2014-01-26 17:47
快速回复:C语言编写,统计文件中的单词出现频率,结果是逐个输出单词,并输出这 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024307 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved