69,368
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct word
{
char name[30]; //单词
int time; //单词出现的次数
}W[1000];
int sum; //单词的总个数
void chuli(char s[])
{
int i,j;
int flag=0; //flag为零时没有重复的
for(i=0;i<=sum;i++)
{
if(strcmp(W[i].name,s)==0) //如果重复
{
W[i].time++;
flag=1;
sum++;
}
}
if(flag==0) //如果不重复
{
for(j=0;j<30;j++)
W[sum].name[j]=s[j];
W[sum].time++;
sum++;
}
}
void BubbleSort() /*冒泡*/
{
int i,j;
struct word a;
for(i=0;i<sum;i++)
{
for(j=i+1; j<sum; j++)
if(W[i].time < W[j].time)
{
a=W[j];
W[j]=W[i];
W[i]=a;
}
}
}
int main()
{
char ch,s[30];
int i,flag=0;
FILE *fp1, *fp2;
fp1=fopen("d://a.txt","r");
if(fp1==NULL)
{
printf("cannot find the file! \n");
exit(1);
}
sum=0;
ch='\0';
for(i=0;i<1000;i++)
W[i].time=0;
while(ch!=-1)
{
for(i=0;i<30;i++)
s[i]='\0';
ch=fgetc(fp1);
if(('A'<=ch&&ch<='Z')||(ch>='a'&&ch<='z')) /*是否为字母*/
{
for(i=0;;i++) //默认计算结果为真
{
s[i]=ch;
ch=fgetc(fp1);
if(('A'<=ch&&ch<='Z')||(ch>='a'&&ch<='z'))
continue;
else
break; /*不是则结束*/
}
chuli(s);
}
}
BubbleSort();
fp2=fopen("d://result2.txt","w");
if(fp2==NULL)
{
printf("cannot open the file! \n");
exit(1);
}
printf("finish\n");
fprintf(fp2,"该文章中的单词按词频从大到小排列依次为:\n");
for(i=0; i<sum; i++)
fprintf(fp2,"%s:%d\n",W[i].name,W[i].time); //将统计结果写入磁盘文件中
return 0;
}
if(strcmp(W[i].name,s)==0) //如果重复
{
W[i].time++;
flag=1;
sum++;
}
重复的 sum 就别 ++ 了吧