现在的位置: 首页 > 综合 > 正文

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

2013年08月08日 ⁄ 综合 ⁄ 共 1349字 ⁄ 字号 评论关闭
#include <stdlib.h>
#include <stdio.h>

#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<len;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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#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;
}



抱歉!评论已关闭.