歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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. { 
  30.     return (sizeof keyTab /sizeof keyTab[0]);     
  31. } 
  32. //打印   
  33. void printKey(KeyWord key[],size_t len) 
  34. { 
  35.      
  36.       int i; 
  37.       for(i=0;i<len;i++) 
  38.       { 
  39.            printf("%4d %s\n",key[i].cout,key[i].keyWord);               
  40.       } 
  41. } 
  42.  
  43. //從文件中獲取一個單詞   
  44. int getWord(char* word,int len,FILE* f){ 
  45.    char* w = word; 
  46.    int c; 
  47.    //跳過空格   
  48.    while(isspace(c=fgetc(f)))   
  49.          ;   
  50.    if(c!=EOF) 
  51.         *w++ = c; 
  52.    //不是字母   
  53.    if(!isalpha(c)) 
  54.    { 
  55.      *w='\0'; 
  56.      return c;                 
  57.    } 
  58.    for(;--len>0;w++) 
  59.    { 
  60.        if(!isalnum(*w=fgetc(f))) 
  61.        { 
  62.            ungetc(*w,f);   
  63.            break;                     
  64.        }                   
  65.    } 
  66.    *w = '\0'; 
  67.    return c; 
  68. } 
  69. //二分查找   
  70. int binSearch(KeyWord k[], char* word,int len) 
  71. { 
  72.     int low,high,mid,pos; 
  73.     low=0; 
  74.     high=len-1; 
  75.     while(low<=high) 
  76.     { 
  77.          mid = (high+low)/2; 
  78.          //如果word比key[mid].keyword小 下次循環在[low~mid-1]之間找           
  79.          if((pos=strcmp(word,k[mid].keyWord))<0) 
  80.          { 
  81.             high = mid-1;                                 
  82.          }else if(pos>0){     
  83.              low = mid+1; 
  84.         }else{ 
  85.             return mid; 
  86.         }                   
  87.     } 
  88.     return -1;             
  89. } 
  90. //FindKeyW.h  
  91. //main.c  
  92. #include <stdio.h>  
  93. #include <stdlib.h>  
  94. #include <string.h>  
  95. #include "FindKeyW.h"  
  96.  
  97. int main(int argc, char *argv[]) 
  98. { 
  99.   extern KeyWord keyTab[]; 
  100.   size_t len = getLen(); 
  101.   FILE* f; 
  102.   if(f=fopen("FindKeyW.h","r")) 
  103.   { 
  104.      char word[MAX_LEN]; 
  105.      int pos; 
  106.      while(getWord(word,MAX_LEN,f)!=EOF) 
  107.      {       
  108.          if(isalpha(word[0])) 
  109.          { 
  110.              if((pos=binSearch(keyTab,word,len))>0) 
  111.               { 
  112.                   keyTab[pos].cout++;                       
  113.               }                       
  114.          }               
  115.      }                       
  116.     fclose(f);             
  117.   } 
  118.   printKey(keyTab,len);   
  119.   system("PAUSE");   
  120.   return 0; 
  121. } 
Copyright © Linux教程網 All Rights Reserved