【C语言】对输入的字符串中C关键词的查找统计
完成对输入的字符串中C关键词的查找统计。
程序运行示例如下:
本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:
if do while while do break goto helloworld end
您的输入中C语言关键字出现的次数统计如下:
break : 1
do : 2
goto : 1
if : 1
while : 2
输入格式:
"本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:\n"
输出格式:
"您的输入中C语言关键字出现的次数统计如下:\n"
"%-10s: %6d\n"

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #define MAX 32 struct Count { char* name; int count; }; int main() { char s[10] = { 0 }; struct Count arr[MAX] = { "auto", 0, "break",0, "case",0, "char",0, "const", 0, "continue",0, "default",0, "do", 0, "double",0, "else",0, "enum",0, "float",0, "for",0, "goto",0, "if",0, "int",0, "long",0, "register",0, "while", 0, "reuturn",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 i; printf("本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:\n"); while (strcmp(s, "end") != 0) { scanf("%s", s); for (i = 0; i < MAX-1; i++) { if (strcmp(s, arr[i].name) == 0) { // strcmp--字符串比较函数,如果两个字符串相等,返回值为0 arr[i].count++; } } } printf("您的输入中C语言关键字出现的次数统计如下:\n"); for (i = 0; i < MAX-1; i++) { if (arr[i].count != 0) { printf("%-10s: %6d\n", arr[i].name, arr[i].count); } } }

#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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具