C语言统计源文件关键字的个数


C语言统计源文件关键字的个数

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.  
  4. #define MAX_WORD 128;  
  5. #define MAX_LEN 100  
  6.  
  7. typedef struct _Key{ 
  8.    char* keyWord; 
  9.    int cout; 
  10. }KeyWord; 
  11.    
  12. //初始化   
  13. KeyWord keyTab[]={ 
  14.     "auto",0, 
  15.     "break",0, 
  16.     "case",0, 
  17.     "char",0, 
  18.     "const",0, 
  19.     "continue",0, 
  20.     "default",0, 
  21.     "define",0, 
  22.     "unsigned",0, 
  23.     "void",0, 
  24.     "volatile",0, 
  25.     "while",0 
  26. }; 
  27. //获取长度   
  28. size_t getLen(void
  29.     return (sizeof keyTab /sizeof keyTab[0]);     
  30. //打印   
  31. void printKey(KeyWord key[],size_t len) 
  32.      
  33.       int i; 
  34.       for(i=0;i<len;i++) 
  35.       { 
  36.            printf("%4d %s\n",key[i].cout,key[i].keyWord);               
  37.       } 
  38.  
  39. //从文件中获取一个单词   
  40. int getWord(char* word,int len,FILE* f){ 
  41.    char* w = word; 
  42.    int c; 
  43.    //跳过空格   
  44.    while(isspace(c=fgetc(f)))   
  45.          ;   
  46.    if(c!=EOF) 
  47.         *w++ = c; 
  48.    //不是字母   
  49.    if(!isalpha(c)) 
  50.    { 
  51.      *w='\0'
  52.      return c;                 
  53.    } 
  54.    for(;--len>0;w++) 
  55.    { 
  56.        if(!isalnum(*w=fgetc(f))) 
  57.        { 
  58.            ungetc(*w,f);   
  59.            break;                     
  60.        }                   
  61.    } 
  62.    *w = '\0'
  63.    return c; 
  64. //二分查找   
  65. int binSearch(KeyWord k[], char* word,int len) 
  66.     int low,high,mid,pos; 
  67.     low=0; 
  68.     high=len-1; 
  69.     while(low<=high) 
  70.     { 
  71.          mid = (high+low)/2; 
  72.          //如果word比key[mid].keyword小 下次循环在[low~mid-1]之间找           
  73.          if((pos=strcmp(word,k[mid].keyWord))<0) 
  74.          { 
  75.             high = mid-1;                                 
  76.          }else if(pos>0){     
  77.              low = mid+1; 
  78.         }else
  79.             return mid; 
  80.         }                   
  81.     } 
  82.     return -1;             
  83. //FindKeyW.h  
  84. //main.c  
  85. #include <stdio.h>  
  86. #include <stdlib.h>  
  87. #include <string.h>  
  88. #include "FindKeyW.h"  
  89.  
  90. int main(int argc, char *argv[]) 
  91.   extern KeyWord keyTab[]; 
  92.   size_t len = getLen(); 
  93.   FILE* f; 
  94.   if(f=fopen("FindKeyW.h","r")) 
  95.   { 
  96.      char word[MAX_LEN]; 
  97.      int pos; 
  98.      while(getWord(word,MAX_LEN,f)!=EOF) 
  99.      {       
  100.          if(isalpha(word[0])) 
  101.          { 
  102.              if((pos=binSearch(keyTab,word,len))>0) 
  103.               { 
  104.                   keyTab[pos].cout++;                       
  105.               }                       
  106.          }               
  107.      }                       
  108.     fclose(f);             
  109.   } 
  110.   printKey(keyTab,len);   
  111.   system("PAUSE");   
  112.   return 0; 

相关内容