lcszxy 发表于 2007-6-8 08:34

这个算词频的程序帮忙看一下

%统计子串substring在字符串string中出现在次数
int strstr_cnt(char *string,char *substring)
{
   inti=0;j=0;k=0;count=0;
for(i=0;string;i++)
for(j=i,k=0;substring&&string==substring;j++,k++)
   if(~substring)count++;
return(count);
}

int main(int argc,char *argv[])
{
int count,count1,i,j;last=0,last1=0;
char *temp,*count2,*string_all;
char buffer, %从文件中读入的一串字符
   string_sub, %需要统计出现次数的词语
   tmp;   %这个字符串包含,词语的最后一个汉字(为两个字节)和一个字符串结束符\0
FILE *fp;
fp=fopen("all.txt","rt");
fprintf ('注意事项:\n\n\n(1)请先把待查找文本放在本目录并将其重命名为all.txt。\n\n(2)确认文本开头和结尾不能有空行,否则会运行错误。\n\n\n\n');
while(1)
{
last=0;
fprintf('请输入要检索的词:\n');
gets(string_sub);
%把输入的词的最后一个汉字存入tmp
tmp=string_sub;
tmp=string_sub;
tmp=0;
%循环统计string_sub和tmp在文件中出现的次数
while(~feof(fp))%判断fp 是不是文件结尾
{
   temp=fgets(buffer,sizeof(buffer),fp); %读取字符串
   if(temp~=NULL) {
    count=strstr_cnt(temp,string_sub);
    count1=strstr_cnt(temp,tmp);
   } else
    break;
   last+=count;
   last1+=count1;
}
fseek(fp,0,SEEK_SET);%移动指针
%输出统计的结果
if(last1==0)
   fprintf('很遗憾,一个也没有查到,唉……\n\n\n\n');
else
{
   fprintf('\"%s\"出现的次数为%d\n',string_sub,last);
   fprintf('\"%s\"出现的次数为%d\n',tmp,last1);
   fprintf('词频为:%f\n\n',((float)last)/last1);
}
}
getchar();
}

[ 本帖最后由 eight 于 2007-6-8 15:19 编辑 ]

lcszxy 发表于 2007-6-8 08:52

我的程序是用c编的,可以运行的,可老师要用matlab,我对matlab不太懂,请高人帮忙改一下!谢谢

lcszxy 发表于 2007-6-8 09:07

说int i,j,k,count=0;有问题,请指教,多谢了

rocwoods 发表于 2007-6-8 09:20

在MATLAB中,这项工作要简单得多.只要一句话
a=findstr(string,substring)
就能返回substring在string中出现的位置
length(a)就是个数了

lcszxy 发表于 2007-6-8 09:35

因为我的数据很多,我想分组读取,我以前学c的,希望可以说的详细些,谢谢

eight 发表于 2007-6-8 09:54

原帖由 lcszxy 于 2007-6-8 09:35 发表 http://www.chinavib.com/forum/images/common/back.gif
因为我的数据很多,我想分组读取,我以前学c的,希望可以说的详细些,谢谢

自己 help findstr 吧

其他问题请多看看基础书、本版置顶贴:聚宝盆等等
页: [1]
查看完整版本: 这个算词频的程序帮忙看一下