您的位置:首页 > 编程语言 > C语言/C++

一个用于统计输入中各个C语言关键字出现次数的程序

2013-10-31 18:36 381 查看
       考虑写一个用于统计输入中各个C语言关键字出现次数的程序。我们可以用一个字符串数组来存放关键字名,一个整型数组存放相应关键字的出现次数。

        另外一种方法是我们直接用结构体来表示。本例采用用结构体的方法。

完整代码如下:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAXWORD 100
#define NKEYS (sizeof(keytab) / sizeof(keytab[0]))

int getword(char *, int);
//int binsearch(char *, struct key *, int);

struct key
{
char *word;
int count;
} keytab[] = {
"auto", 0,
"break", 0,
"case", 0,
"char", 0,
"const", 0,
"continue", 0,
"default", 0,
"do", 0,
"double", 0,
"else", 0,
"enum", 0,
"extern", 0,
"float", 0,
"for", 0,
"goto", 0,
"if", 0,
"int", 0,
"long", 0,
"register", 0,
"return", 0,
"short", 0,
"signed", 0,
"sizeof", 0,
"static", 0,
"struct", 0,
"switch", 0,
"typedef", 0,
"union", 0,
"unsigned", 0,
"void", 0,
"volatile", 0,
"while", 0
};

int main(void)
{
int n;
char word[MAXWORD];

while(getword(word, MAXWORD) != EOF)
if(isalpha(word[0]))
if((n = binsearch(word, keytab, NKEYS)) >= 0)
keytab
.count++;
for(n=0; n<NKEYS; n++)
if(keytab
.count > 0)
printf("%4d %s\n",
keytab
.count, keytab
.word);
return 0;
}

int binsearch(char *word, struct key *keytab, int n)
{
int cond;
int low = 0;
int high = n - 1;
int mid;
while(high >= low)
{
mid = low + (high - low) / 2;
if((cond = strcmp(word, keytab[mid].word)) < 0)
high = mid - 1;
else if(cond > 0)
low = mid + 1;
else
return mid;
}
return -1;
}

int getword(char *word, int lim)
{
int c, getch(void);
void ungetch(int);
char *w = word;

while(isspace(c = getch()))
;
if(c != EOF)
*w++ = c;
if(!isalpha(c))
{
*w = '\0';
return c;
}
for(; --lim > 0; w++)
if(!isalnum(*w = getch()))
{
ungetch(*w);
break;
}
*w = '\0';
return word[0];
}

#define BUFSIZE 100
char buf[BUFSIZE];

int bufp = 0;
int getch(void)
{
return (bufp > 0) ? buf[--bufp] : getchar();
}

void ungetch(int c)
{
if(bufp > BUFSIZE)
printf("ungetch: too many characters");
else
buf[bufp++] = c;
}


程序运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐