思路:先创建一个结构体word,用来存放单词,再创建一个空的与其一样的结构体o用来交换
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct word
{
char c[30];
int n;
}w[10000];
struct word o;
下面程序主体,变量声明,打开文本文件看是否文件为空
void main()
{
FILE *fp;
char ch;
int k=0,h,m,l,j,x,i=0,sum;
fp=fopen("D://huang.txt","r");
if(fp==NULL)
{
printf("无法打开此文件
");
exit(0);
}
下面代码将单词存入结构体用while,if循环
while(!feof(fp))
{
ch=fgetc(fp);
if(ch<='Z'&&ch>='A')
ch=ch+32;
if(ch<='z'&&ch>='a')
{
w[k].c[i]=ch;
i++;
h=1;
}
else
{if(h==1)
k++;
h=0;
i=0;
}
sum=k;
}
下面是判断是否有相同单词,若有将结构体中的单词出现次数n置0
for(i=0;i<sum;i++)
{
w[i].n=1;
}
for(m=0;m<sum;m++)
{
for(l=m+1;l<sum;l++)
{
if(strcmp(w[m].c,w[l].c)==0)
{
if(w[m].n==0||w[l].n==0)
continue;
else
{
w[m].n++;
w[l].n=0;
}
}
下面是按着单词出现次数n,进行排序
for(i=0;i<sum;i++)
for(j=i+1;j<sum;j++)
{
if(w[i].n<w[j].n)
{
o=w[i];
w[i]=w[j];
w[j]=o;
}
}
下面是将结果输出再屏幕
printf("单词总数%d
",sum);
for(x=0;x<10;x++)
printf("单词%s 出现次数 %d
",w[x].c,w[x].n);
fclose(fp);
}
结果截图: