#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++;
}
}
}
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;
}
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;
}
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__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~