Kamp;R练习题6-1统计关键词出现的次数

这道练习题训练了:

1.结构体数组

2.二分查找

3.指针操作

----

都不难。但非常基础,我认为非常好,做完了记到博客上来,题目见k&R,实现例如以下:

/** Practice of struct array. K&R 6-1* @author : wusuopubupt* @date   : 2014-09-18*/#include <stdio.h>
#include <ctype.h>
#include <string.h>#define MAXWORD 100typedef struct key_{char *word;int count;
} key;key key_tab[] = {{"auto", 0},{"break", 0},{"case", 0},{"char", 0},{"const", 0},{"continue", 0},{"default", 0},{"for", 0},{"int", 0},{"void", 0},{"while", 0}
};int getword(char *word, int n);
int binary_search(key key_tab[], char *word, int n);
key *binary_search2(key *key_tab, char *word, int n);int getword(char *word, int n) {int c;char *w = word;while(isspace(c = getchar())) {;}if(c != EOF) {*w++ = c;}if(!isalpha(c)) {*w = '\0';return c;}while(n > 0) {c = getchar();if(isalnum(c)) {*w++ = c;}else {break;}n--;}*w = '\0';return w[0];
}int binary_search(key key_tab[], char *word, int n) {int low = 0;int high = n-1;int mid;int result;while(low <= high) {mid = (low+high) / 2;result = strcmp(word, key_tab[mid].word);if(result < 0) {high = mid-1;}else if(result > 0) {low = mid + 1;}else {return mid;}}return -1;
}/* implemented with pointer */
key *binary_search2(key *key_tab, char *word, int n) {key *low = key_tab;key *high = key_tab + n-1;key *mid;int result;while(low <= high) {//mid = (low+high) / 2; /* error: can not use pointer+pointer d*/mid = low + (high-low) / 2; /* pointer + num */result = strcmp(word, mid->word);if(result < 0) {high = mid-1;}else if(result > 0) {low = mid + 1;}else {return mid;}}return NULL;
}int main1() {int i;int n_keys = sizeof(key_tab) / sizeof(key_tab[0]);char word[MAXWORD];while(getword(word, MAXWORD) != EOF) {if(isalpha(word[0])) {if((i = binary_search(key_tab, word, n_keys)) >= 0) {key_tab[i].count++;}}}i = 0;while(i < n_keys) {printf("%s : %d\n", key_tab[i].word, key_tab[i].count);i++;}return 0;
}int main() {int n_keys = sizeof(key_tab) / sizeof(key_tab[0]);char word[MAXWORD];key *k = NULL;while(getword(word, MAXWORD) != EOF) {if(isalpha(word[0])) {if((k = binary_search2(key_tab, word, n_keys)) != NULL) {k->count++;}}}int i = 0;while(i < n_keys) {printf("%s : %d\n", key_tab[i].word, key_tab[i].count);i++;}return 0;
}



github:https://github.com/wusuopubupt/LearningC/blob/master/K%26R/chp6/keyword_count.c



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大话领域驱动设计——表示层及其他

概述表示层又称用户界面层&#xff0c;包含应用程序的页面、组件等UI元素。服务层提供项目的HTTP API接口&#xff0c;包含MVC Controller和相关组件。ABP框架虽然在表示层提供了不少组件&#xff0c;但是这些和DDD本身没有多少关系。而且随着前后端分离架构的流行&#xff0c;…

C语言九十六之实现经典的字符串反转(通过指针或下标操作)

✅作者简介&#xff1a;大家好我是码莎拉蒂&#xff0c;CSDN博客专家&#x1f947;&#x1f947;&#x1f947; &#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;C语言试题200例 &#x1f4ac;推荐一款模拟面试、刷题神器&#x1f449; 点击跳转进…

Windows10家庭中文版没有本地策略选项完美解决方案

Win+R,在运行中输入:secpol.msc,查看安全设置是否打开,如下图所示。 组策略对于优化和维护Windows系统来说十分重要。众所周知,Windows 10家庭版中并不包含组策略,对于使用家庭版Windows的朋友来说,十分不方便。 通常情况下,如果策略组没有打开的话,在安装CAD等软件时…

JavaScript总结(六)

使用DOM操纵样式表 ✍ 操纵元素的Style样式属性&#xff08;所有的均对于CSS的内联式&#xff09; 对于每个CSS样式&#xff0c;Style对象都包含了一个相对应的属性&#xff0c;只需要用到style属性即可&#xff1b; Div.style.color "red"; //给div元素设置字体颜色…

[转]浅谈CMD和win powershell的区别

1、前言&#xff1a;本文给大家简单描述了一下POWERSHELL和CMD的区别&#xff0c;简单的说&#xff0c;Powershell是cmd的超集&#xff0c;换句话说&#xff0c;cmd能做的事情&#xff0c;Powershell都能做&#xff0c;但是Powershell还能额外做许多cmd不能做的活。 2、cmd是和…

【ArcGIS风暴】栅格计算器(Raster Calculator)运算出现错误问题及解决方案汇总

栅格计算器(Raster Calculator) 是一种空间分析函数工具,可以输入地图代数表达式,使用运算符和函数来做数学计算,建立选择查询,或键入地图代数语法。只有熟练的运用并记忆一些常用的公式,才能很好的运用栅格计算器。在使用的过程中,容易出现这样那样的问题,本文就把栅…

「博客之星」评选,互投5星,留链必投

⭐⭐ ⭐ ⭐⭐ 欢迎诚信互投⭐ ⭐ ⭐ ⭐⭐ ⭐⭐⭐⭐⭐ 谢谢各位大佬门&#xff0c;互投5星⭐⭐⭐⭐⭐ 投票地址&#xff1a; https://bbs.csdn.net/topics/603958492 投票地址&#xff1a; https://bbs.csdn.net/topics/603958492 投票地址&#xff1a; https://bbs.csdn.net…

为 ServiceCollection 实现装饰器模式

为 ServiceCollection 实现装饰器模式Intro在二十四种设计模式中&#xff0c;有一个模式叫做装饰器模式一般用来动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更为灵活&#xff0c;有更好的扩展性&#xff0c;我们也可以借助 D…

手把手教你启用Win10的Linux子系统 Ubuntu

1、打开“开发者选项” 2、启用“执行 Linux 程序的windows 子系统” 3、应用商店下载安装Ubuntu 附&#xff1a;ubuntu的一些命令及查看已安装软件包的命令 // 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat…

jquery的height()和javascript的height总结,js获取屏幕高度

jquery的height()和javascript的height总结&#xff0c;js获取屏幕高度在javascript和jquery中&#xff0c;都有对各种高度的写法&#xff0c;在这里&#xff0c;我们就着重讲一下窗口、文档等高度的理解。(宽度和高度差不多&#xff01;)jquery的各种高度首先来说一说$(docume…

【地理信息系统GIS】教案(七章全)第五章:空间数据查询与空间分析

目录 第一节 空间数据查询第二节 缓冲区分析第三节 叠置分析第四节 网络分析第五节 DEM建立及分析第一节 空间数据查询 1.1 空间数据查询 1、空间数据查询的含义 从空间数据库中找出所有满足属性约束条件和空间约束条件的地理对象。 空间数据查询的一般过程 2、空间数据查询…

Understanding G1 GC Logs--转载

原文地址&#xff1a;https://blogs.oracle.com/poonam/entry/understanding_g1_gc_logs Understanding G1 GC Logs By Poonam-Oracle on Jun 18, 2012 The purpose of this post is to explain the meaning of GC logs generated with some tracing and diagnostic options fo…

Dart语言精简入门介绍

Dart语言精简入门介绍 1、介绍 Dart 在设计时应该是同时借鉴了 Java 和 JavaScript和kotlin 面向对象 JIT&AOT&#xff1a;JIT&#xff08;Just in Time&#xff09;优点&#xff1a;即时编译&#xff0c;开发期间更快编译&#xff0c;更快的重载&#xff1b;缺点&#…

WPF 窗口居中 变更触发机制

本文经原作者授权以原创方式二次分享&#xff0c;欢迎转载、分享。原文作者&#xff1a;唐宋元明清原文地址&#xff1a;https://www.cnblogs.com/kybs0/p/7420767.html窗口居中 & 变更触发机制解决&#xff1a;1&#xff09;单实例窗口&#xff0c;窗口每次隐藏后再显示时…

[转]5分钟实现Android中更换头像功能

5分钟实现Android中更换头像功能 写在前面&#xff1a; 更换头像这个功能在用户界面几乎是100%出现的。通过拍摄照片或者调用图库中的图片&#xff0c;并且进行剪裁&#xff0c;来进行头像的设置。 功能相关截图如下&#xff1a; 下面我们直接看看完整吧&#xff1a; public cl…

Excel VBA窗体上打印系统时间print now出错原因及解决方案

如图所示,需要在窗体上显示当前系统时间: 首先,我们看一下now函数的原型: Now 函数   语法:Now   说明:返回一个 Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。   示例: Private Sub CommandButton1_Click()Dim a As Varianta = NowMsgBox…

(第九周)团队项目14

项目名&#xff1a;食物链教学工具 组名&#xff1a;奋斗吧兄弟 组长&#xff1a;黄兴 组员&#xff1a;李俞寰、杜桥、栾骄阳、王东涵 代码地址&#xff1a;HTTPS: https://git.coding.net/li_yuhuan/FoodChain.git SSH: gitgit.coding.net:li_yuhuan/FoodChain.git SCRUM会议…

为什么 C# 访问 null 字段会抛异常?

一&#xff1a;背景 1. 一个有趣的话题最近在看 硬件异常 相关知识&#xff0c;发现一个有意思的空引用异常问题&#xff0c;拿出来和大家分享一下&#xff0c;为了方便讲述&#xff0c;先上一段有问题的代码。namespace ConsoleApp2 {internal class Program{static Person pe…

Android项目实战(十五):自定义不可滑动的ListView和GridView

不可滑动的ListView (RecyclweView类似) public class NoScrollListView extends ListView {public NoScrollListView(Context context, AttributeSet attrs) {super(context,attrs);}public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ int mExpandSpec …

C语言试题一百之输入某年某月某日,判断这一天是这一年的第几天

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:输入某年某月某日,判断这一天是这一年的第几天? 分析: 以 3 月 5 日为例,应该先把…