C 语言统计关键字出现次数

2014-11-23 22:04:07 · 作者: · 浏览: 5
#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\n",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 != '\n' && c != ' ' && c != '\t' && isalpha(c)) word[i++] = c; if(c == '\n' || c == ' ' ) { word[i] = '\0'; 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; }