统计C语言关键字出现次数

《C程序设计语言》K&R版本第6章结构6.3结构数组内容

/*
Name: 统计c语言关键字出现次数
Copyright:
Author: lingr7
Date: 21/10/18 10:05
Description: 完全根据《C程序设计语言》K&R版本6.3结构数组内容编写。在dev c++5.11中编译运行成功
一个项目文件.dev,内含calc.h,getch.c,getop.c,keytab.h,tongjimain.c.4个子文件
关键字结构数组在keytab.h中定义,可以自行修改该表,但要注意,这个数组里顺序必须是字典序升序。
*/ /*tongjimain.c*/
#include <stdio.h>
#include <ctype.h>
#include <string.h> #include "calc.h"
#include "keytab.h" #define MAXWORD 100 int getword(char *, int);
int binsearch(char *, struct key *, int);
/*统计输入中c语言关键字的出现次数*/
main(){
int n;
char word[MAXWORD];
printf("%s %s %s", keytab[0].word, keytab[1].word, keytab[2].word);
while (getword(word,MAXWORD) != EOF)/*因为EOF而不易调试*/
if (isalpha(word[0]))
if ((n = binsearch(word, keytab, NKEYS)) >= 0)
keytab[n].count++;
for (n = 0; n < NKEYS; n++)
if (keytab[n].count > 0)
printf("%4d %s\n",
keytab[n].count, keytab[n].word);
return 0;
}
/*折半查找*/
/*2018年10月20日
lingr7*/
/* binsearch函数 :在tab[0]到tab[n-1]中查找单词 */
int binsearch(char *word, struct key tab[], int n){
int cond;
int low, high, mid; low = 0;
high = n - 1;
while (low <= high){
mid = (high+low) / 2;
if ((cond = strcmp(word, tab[mid].word)) < 0)
high = mid - 1;
else if (cond > 0)
low = mid + 1;
else /*找到了匹配的值*/
return mid;
}
return -1; /*没有匹配的值*/
}
/* getword函数:从输入中读取下一个单词或字符*/
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];
}
/*calc.h*/
#define NUMBER '0' /*void push(double);*/
/*double pop(void);*/ int getop(char []); int getch(void);
void ungetch(int);
/*keytab.h*/
#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,
"main", 0,
"unsigned", 0,
"void", 0,
"volatile", 0,
"while", 0,
};
/*getch.c*/
#include <stdio.h>
#define BUFSIZE 100 char buf[BUFSIZE]; /* buffer for ungetch */
int bufp = 0; /* next free position in buf */ int getch(void) /* get a (possibly pushed-back) character */
{
return (bufp > 0) ? buf[--bufp] : getchar();
} void ungetch(int c) /* push character back on input */
{
if (bufp >= BUFSIZE)
printf("ungetch: too many characters\n");
else
buf[bufp++] = c;
}
/*getop.c*/
#include <stdio.h>
#include <ctype.h>
#include "calc.h" /* getop: get next character or numeric operand */
int getop(char s[])
{
int i, c; while ((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
if (!isdigit(c) && c != '.')
return c; /* not a number */
i = 0;
if (isdigit(c)) /* collect integer part */
while (isdigit(s[++i] = c = getch()))
;
if (c == '.') /* collect fraction part */
while (isdigit(s[++i] = c = getch()))
;
s[i] = '\0';
if (c != EOF)
ungetch(c);
return NUMBER;
}

统计C语言关键字出现次数的更多相关文章

  1. 李洪强漫谈iOS开发[C语言-009] - C语言关键字

    // //  main.m //  04 - C语言关键字 // //  Created by vic fan on 16/7/12. //  Copyright © 2016年 李洪强. All r ...

  2. FILE不是C语言关键字

    FILE不是C语言关键字,只是标准C中的标准输入输出中定义的一个新的数据类型 stdio.htypedef struct _iobuf{ char* _ptr; int _cnt; char* _ba ...

  3. Linux 统计某个字符串出现的次数

    要统计一个字符串出现的次数,这里现提供自己常用两种方法: 1. 使用vim统计 用vim打开目标文件,在命令模式下,输入 :%s/objStr//gn 即可 2. 使用grep: grep -o ob ...

  4. C语言关键字-volatile

    1.C语言关键字volatile     C 语言关键字volatile(注意它是用来修饰变量而不是上面介绍的__volatile__)表明某个变量的值可能在外部被改变,因此对这些变量的存取 不能缓存 ...

  5. c语言关键字总结

    1.关键字变更历史 1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字: inline restrict _Bool _Complex _Imaginary(注意bool 从 ...

  6. Java利用正则表达式统计某个字符串出现的次数

    //统计某个字符出现的次数 private void countSubString(){ String string1="香蕉.玉米.面粉"; String string2=&qu ...

  7. 1.C语言关键字(auto break case char const swtich)

    ANSI C标准C语言共有32个关键字,分别为: auto break case char const continue default do double else enum extern floa ...

  8. 统计C语言程序行数

    补充前一篇中统计C语言程序行数的程序 写得比较匆忙,可能有些失误,等弄明白GitHub的用法并完善程序后再补充完整代码链接 没有写成函数,但经过简单修改可以作为一个计算或判断函数使用 判断算法主要为以 ...

  9. C/C++ 知识点---C语言关键字(32个)

    C/C++ 知识点 1.C语言关键字(32个) <1>.基本数据类型 [5] void :声明函数无返回值或无参数,声明空类型指针 char :声明字符型变量 int :声明整形变量 fl ...

随机推荐

  1. nginx中文手册内容说明

    1.什么是nginx? Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接, ...

  2. web小trick

    1.linux下交换文件 .index.php.swp 有时可查看源码2.当php后缀被过滤的时候可以直接对ph开头的后缀进行一个fuzz测试可以上传的文件后缀名3.curl -x 123.45.67 ...

  3. docker exit status 255解决

    一 windows开发整docker就是痛苦,在公司win7电脑想拿起几年没再用的docker 结果直接报错 Error getting IP address: ssh command error: ...

  4. Unity3d开发的第一个实例

    1.untiy3d开发环境配置好以后,开始我的第一个开发实例 2.在Hirearch---create---3DObject---Cube,在场景中创建一个正方体 3.project---create ...

  5. java多线程处理任务

    最近用到使用多线程处理给用户发送站内消息的问题,想到使用java自带的线程池进行处理这个问题,具体如下: 定义一个线程: package com.qlwb.util; import org.apach ...

  6. 在MFC对话框中快速集成三维控件

    在MFC的对话框中可以方便的集成AnyCAD三维控件(c++版本),遵循一下几步: 1.在对话框资源中增加一个Static控件,ID为IDC_STATIC_3D,并且把它的Notify属性设置为Tru ...

  7. iOS 收藏的笔记

    目录 UI 资料类 网络篇 图表 动画 菜单栏 数据存储和数据库 第三方库 社交分享 刷新 视频音频 其他 阅读 JS 导航 系统 支付 书籍 工具类 完整项目收集 DEMO UI http://ww ...

  8. kickstart2019 round_A B. Parcels

    思路: 利用了曼哈顿距离和切比雪夫距离之间的转化. 参考: https://blog.csdn.net/Dylan_Frank/article/details/88985444 https://www ...

  9. Error和Exception的区别?

    Error和Exception都继承自Throwable类 二者不同之处在于: Exception: 1.可以是可控制的(checked)或是不可控制的(unchecked) 2.表示一个有程序员编写 ...

  10. Java框架:spring框架整合hibernate框架的xml配置(使用注解的方式)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...