#include
#include
#include
#define NKEYS (sizeof keytab / sizeof(struct key))
struct key
{
char *word;
int count;
};
/*关键字列表(注意一定要按字典排序)*/
struct key keytab[15] =
{
"abort",0,
"break",0,
"clock",0,
"define",0,
"echo",0,
"fgetc",0,
"get",0,
"help",0,
"insert",0,
"jump",0,
"kind",0,
"long",0,
"malloc",0,
"null",0,
"operate",0
};
int binarysearch(char *word, struct key tab[], int n);
int getword(char *word);
/*
功能:统计输入文本中关键字出现的次数。
*/
int main()
{
char word[30];
int n;
while(getword(word) != 0 && strcmp(word,"quit") != 0)
{
if((n = binarysearch(word,keytab,NKEYS )) >= 0);
keytab[n].count++;
}
for(n = 0; n < NKEYS; n++)
{
if(keytab[n].count > 0)
printf("%s : %d
",keytab[n].word,keytab[n].count);
}
return 0;
}
/*从输入端得到一个单词*/
int getword(char *word)
{ char c;
int i = 0;
while(isspace(c = getchar()))
;
while(1)
{
if(c != '
' && c != ' ' && c != '' && isalpha(c))
word[i++] = c;
if(c == '
' || c == ' ' )
{
word[i] = ' ';
return i;
}
c = getchar();
}
return i;
}
/*binarysearch 函数: 在tab[0]到tab[n]中查找单词*/
int binarysearch(char *word, struct key tab[], int n)
{
int mid,l,h,flag;
l= 0;
h = n - 1;
while(l <= h)
{
mid = (l + h)/2;
if( (flag = strcmp(word,tab[mid].word)) < 0)
h = mid - 1;
else if(flag > 0)
l = mid + 1;
else
return mid;
}
return -1;
}