#include
#include
#define MAX_WORD 128;
#define MAX_LEN 100
typedef struct _Key{
char* keyWord;
int cout;
}KeyWord;
//初始化
KeyWord keyTab[]={
"auto",0,
"break",0,
"case",0,
"char",0,
"const",0,
"continue",0,
"default",0,
"define",0,
"unsigned",0,
"void",0,
"volatile",0,
"while",0
};
//获取长度
size_t getLen(void)
{
return (sizeof keyTab /sizeof keyTab[0]);
}
//打印
void printKey(KeyWord key[],size_t len)
{
int i;
for(i=0;i
{
printf("%4d %s\n",key[i].cout,key[i].keyWord);
}
}
//从文件中获取一个单词
int getWord(char* word,int len,FILE* f){
char* w = word;
int c;
//跳过空格
while(isspace(c=fgetc(f)))
;
if(c!=EOF)
*w++ = c;
//不是字母
if(!isalpha(c))
{
*w='\0';
return c;
}
for(;--len>0;w++)
{
if(!isalnum(*w=fgetc(f)))
{
ungetc(*w,f);
break;
}
}
*w = '\0';
return c;
}
//二分查找
int binSearch(KeyWord k[], char* word,int len)
{
int low,high,mid,pos;
low=0;
high=len-1;
while(low<=high)
{
mid = (high+low)/2;
//如果word比key[mid].keyword小 下次循环在[low~mid-1]之间找
if((pos=strcmp(word,k[mid].keyWord))<0)
{
high = mid-1;
}else if(pos>0){
low = mid+1;
}else{
return mid;
}
}
return -1;
}
//FindKeyW.h
//main.c
#include
#include
#include
#include "FindKeyW.h"
int main(int argc, char *argv[])
{
extern KeyWord keyTab[];
size_t len = getLen();
FILE* f;
if(f=fopen("FindKeyW.h","r"))
{
char word[MAX_LEN];
int pos;
while(getWord(word,MAX_LEN,f)!=EOF)
{
if(isalpha(word[0]))
{
if((pos=binSearch(keyTab,word,len))>0)
{
keyTab[pos].cout++;
}
}
}
fclose(f);
}
printKey(keyTab,len);
system("PAUSE");
return 0;
}