c语言读入源文件统计关键字,C语言统计源文件关键字的个数

#include

#include

#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

{

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

#include

#include

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值