//[重要]9-2-41 P304 从文件中检索出6种C语言的关键字,并统计、输出每种关键字在文件中出现的次数。
//此种写法不熟悉
#include <stdio.h>
#include <string.h>
struct key{
char word[10];
int count;
}keyword[] = {"if",0,"char",0,"int",0,"else",0,"while",0,"return",0};
FILE *file;
char fname[20],buf[500];
int num;
char *getword(FILE *fp){
int i=0;
char c;
while((c=fgetc(fp))!=EOF && (c==' ' || c=='\t' || c=='\n'));
if(c == EOF) return(0);
else buf[i++] = c;
while((c=fgetc(fp))!=EOF && c!=' ' && c!='\t' && c!='\n'){
buf[i++] = c;//将单词放入buf中
}
buf[i] = '\0';
return(buf);
}
void lookup(char *p){
int i;
char *q,*s;
for(i=0;i<num;i++){
q = &keyword[i].word[0];
s = p;
while(*s && *s==*q){
s++;
q++;
}
if(*s==*q){
keyword[i].count++;
break;
}
}
return;
}
void main(){
int i;
char *word;
printf("输入文件名:\n");
scanf("%s",fname);
if((file=fopen(fname,"r"))==NULL){
printf("文件打开错误\n");
return;
}
num = sizeof(keyword) / sizeof(struct key);
while((word = getword(file)) != NULL){
lookup(word);
}
fclose(file);
printf("统计结果如下:\n");
for(i=0;i<num;i++){
printf("keyword='%s',count=%d\n",keyword[i].word,keyword[i].count);
}
}