“d:\3.txt”中存放的是一篇单词个数不超过2000个的英文文章,单词之间的分隔符可以是:空格符、换行符、逗号、句号、引号、冒号、感叹号,要求编写程序对整篇文章中的单词进行统计,统计出每一单词在文章中出现的次数,将统计结果保存在以“result.txt”命名的文件中,存放在D盘根目录下。
提示:用char a[2000][20]存放取出的单词,每行为一个单词,int b[2000]用来记录各个单词的重复次数。(最好程序有解释说明)
补全此程序
#include
#include
#include
#define FLAG_IN 1 //在一个单词的内部标志
#define FLAG_OUT 0 //在一个单词的外部标志
char a[2000][20];
int b[2000]; //数组a记录无重复的单词,每行一个,数组b记录单词的重复次数
int k; //记录有效的单词个数
int check(int n,char d[]){ //以数组d(字符串)与数组a中的前n个元素比较,若已存在,则在相应的数组b自增1,返回1,否则返回0
int i;
for(i=0;i<n;i++){
if(strcmp(d,a[i])==0){
b[i]++;
return 1; //d[]已存在
}
}
return 0; //d[]不存在
}
int countword(){
char ch,d[20]; //数组d记录当前正在读入的单词
int nw,p=0,state; //nw统计单词总数(带重复),p跟踪单词的长度
FILE *fp;
state=FLAG_OUT;
nw=0;
if((fp=fopen("d:\\3.txt","r"))==NULL){
printf("打开文件失败!\n");
exit(0);
}
while(!feof(fp)){
ch=fgetc(fp);
if(ch==' ' || ch=='\n' || ch==',' || ch=='.' || ch==':' || ch=='"' || ch=='!'){
state=FLAG_OUT;
nw++;
d[p]='\0';
//printf("%s\n",d);
p=0;
}
else if(state==FLAG_OUT){
d[p]=ch;
p++;
state=FLAG_IN;
}
else if(state==FLAG_IN){
d[p]=ch;
p++;
}
}
fclose(fp);
return nw;
}
void main(){
int i,n;
k=0;
for(i=0;i<2000;i++)
b[i]=0;
n=countword();
printf("n=%d\n",n);
}