#include
<stdio.h> #include
<ctype.h> #include
<string.h> #define
MAXWORD 80 #define
NKEYS (sizeof(keytab) / sizeof(struct key)) 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, "singed" ,
0, "sizeof" ,
0, "static" ,
0, "struct" ,
0, "switch" ,
0, "typedef" ,
0, "union" ,
0, "unsigned" ,
0, "void" ,
0, "volatile" ,
0, "while" ,
0 }
; void getword( char *,
int ); int binsearch( char *,
struct key
*, int ); int main( int argc,
char *argv[]) { int n; char word[MAXWORD]; printf ( "本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:\n" ); do { getword(word,
MAXWORD); if ( isalpha (word[0])) { if ((n
= binsearch(word, keytab, NKEYS)) >= 0) { keytab[n].count++; //找到则对应次数+1 } } } while ( strcmp (word, "end" )
!= 0); printf ( "您的输入中C语言关键字出现的次数统计如下:\n" ); for (n
= 0; n < NKEYS; n++) { if (keytab[n].count
> 0) { printf ( "%-10s:
%6d\n" ,
keytab[n].word, keytab[n].count); } } return 0; } /*
折半查找:在tab[0]到tab[n-1]中查找word */ int binsearch( char *word,
struct key
tab[], int n) { int result; int low,
high, mid; low
= 0; high
= n - 1; while (low
<= high) { mid
= (low + high) / 2; if ((result
= strcmp (word,
tab[mid].word)) < 0) { high
= mid - 1; } else if
(result > 0) { low
= mid + 1; } else { return mid; } } return -1; } /*
getword:从输入中获取某个单词 */ void getword( char *word,
int lim) { int c; void ungetch( int ); char *w
= word; while ( isspace (c
= getchar ())) { } if (c
!= EOF) { *w
= c; w++; } if (! isalpha (c)) { *w
= '\0' ; } for (
; --lim > 0; w++) { if (! isalnum (*w
= getchar ())) { //读入的某个字符不是字母,则将它退还给输入缓冲区 ungetch(*w); break ; } } *w
= '\0' ; } |
对输入的字符串中C关键词的查找统计。
最新推荐文章于 2024-09-15 10:43:39 发布