完成对输入的字符串中C关键词的查找统计。

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

ctype.h是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节(Byte)字符,也支持宽字符。


__EOF__

本文作者坤舆小菜鸡
本文链接https://www.cnblogs.com/HBU-xuhaiyang/p/12520672.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   坤舆小菜鸡  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示