文件操作与字符处理 求高人指点 总是执行不了
在当前目录中存在文件名为“case1.txt”的文本文件,现读取该文本的内容,统计文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数:#include<stdio.h>
#include<string.h>
#include<ctype.h>
struct
{
char word[21];
int count;
}leader[6]; //设置结构体,用于存放出现次数最多的前5个的单词及其出现次数;
int main()
{
FILE *fp;
char str[10000][21]={"\0"},temp[21]="",a;
int i=0,j=0,n=0,c[10000]={0},t=0,max;
if((fp=fopen("case1.txt","r"))==NULL)
return 0; //打开文件;
while(fscanf(fp,"%c",a)>0) //从文件中读取一个字符;
{
if(isalpha(a)) //判断它是否是字母;
{
temp[n]=a; //如果是就放入字符数组temp中;
n++;
}
else
{
strlwr(temp); //如果遇到非字母的字符,就将字符数组temp中的大写字母变小
strcpy(str[i],temp); //写,并将其放入二维字符数组str中;
for(t=0;t<21;t++) //清空字符数组temp;
{
strcpy(temp[t],"\0");
}
i++;
n=0;
}
}
for(n=0;n<i-1;n++) //统计相同单词的个数,并将统计数放入数组
for(j=n+1;j<i;j++) //c中
{
if(((strcmp(str[n],str[j]))==0)&&(str[n]!="\0"))
c[n]=c[n]+1;
strcpy(str[j],temp);
}
for(n=0;n<5;n++) //统计出现次数最多的前5个的单词,并将它和它的出现次数放入
{ //结构体中;
for(j=0;j<i+1;j++)
{ max=c[0];
if(c[j]>max)
{
max=c[j];
t=j;
}
}
strcpy(leader[n].word,str[j]);
leader[n].count=max;
c[j]=0;
}
for(n=0;n<5;n++) //对出现次数最多的五个单词进行排序;
for(j=n+1;j<5;j++)
{
if((leader[n].count==leader[j].count)&&(strcmp(leader[j].word,leader[n].word)))
{
strcpy(leader[5].word,leader[j].word);
strcpy(leader[j].word,leader[n].word);
strcpy(leader[n].word,leader[5].word);
}
}
for(n=0;n<5;n++) //输出那五个单词及其出现次数;
{
printf("%s %d",leader[n].word,leader[n].count);
}
fclose(fp);
return 0;
}