《Programming Abstractions In C》学习第52天,p130-p131,总结如下:

一、技术总结

1. pig latin game

通过pig latin game掌握字符复制,指针遍历等操作。

/*
* 输入:字符串,这里采用书中坐着自定义的getline函数
*/
#include <stdio.h>
#include <string.h>
#include "simpio.h" #define MaxWord 1000 static _Bool IsVowel(char ch); // 书中p34, if适用于非此即彼的两种选择(two-way);如果有多个,那么就使用switch。
static void PigLatin(char *word, char buffer[], int bufferSize); static char *FindFirstVowel(char *word); // *表示函数FindFirstVowel返回一个指向char的指针 int main() {
char *word;
char translationBuffer[MaxWord + 1]; printf("Enter a word: ");
word = GetLine();
PigLatin(word, translationBuffer, MaxWord + 1);
printf("Pig Latin: %s\n", translationBuffer);
} /*
* Function:IsVowel
* Usage: isVowel = IsVowel(character)
* -----------------------------------
* 该函数判断字符是否是元音字母,如果是,返回True,否则返回False。
*/
_Bool IsVowel(char ch) {
switch (ch) {
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return TRUE;
default:
return FALSE; }
} /*
* Function: PigLatin
* Usage: PigLatin(word, buffer, bufferSize);
* ------------------------------------------
* This function translate a word from English to Pig Latin. The
* translated word is written into the array buffer, which has an
* allocated size of bufferSize. The code checks for buffer
* overflow and generate an error if it occurs.
*/ static void PigLatin(char *word, char buffer[], int bufferSize) {
char *vp;
int wordLength; vp = FindFirstVowel(word);
wordLength = strlen(word);
if (vp == word) {
wordLength += 3;
} else if (vp != NULL) {
wordLength += 2;
} if (wordLength >= bufferSize) {
Error("Buffer overflow");
}
if (vp == NULL) { // 单词中不存在元音字母:不做任何修改
strcpy(buffer, word);
} else if (vp == word) { // 单词以元音字母开头: 在单词末尾添加way(示例:any > anyway)
strcpy(buffer, word);
strcat(buffer, "way");
} else {
// 单词以辅音字母开头: (1)将辅音字母移动到单词尾部,直到第一个字母是元音字母。
// (2)移动完成后,在单词尾部添加ay(示例:trash > ashtray)
strcpy(buffer, vp);
strncat(buffer, word, vp - word);
strcat(buffer, "ay");
}
} /*
* FindFirstVowel: 找出单词中的第一个元音字母
*/
static char *FindFirstVowel(char *word) {
char *cp; // 将原来的指针赋值给新的指针,避免原来的指针被修改 // 遍历指针
for (cp = word; *cp != '\0'; cp++) { // 注意:在这里*cp表示的是值
if (IsVowel(*cp)) {
return cp; // 注意:cp++移动之后,cp指向的地址改变了
}
}
return NULL; // 如果找不到,则返回空指针(NULL)
}

完整代码见:https://github.com/codists/Programming-Abstractions-In-C/tree/main/chapter3/piglatingame

二、英语总结

1.check用法分析

答:p130,“The code checks for buffer overflow and gennerates an error if it occurs.”,记忆中check是及物动词,这里为何会跟for?check既可以用作及物动词(vi),也可以用作不及物动词(vt),意思是"to make certain that sth is corret by examinming it.”。

(1)vt.对xxx进行检查。示例:Customs stopped us and checked (= searched) our bags for alcohol and cigarettes(海关拦住了我们,检查我们的包里有没有烟酒)。

(2)vi.例如书中的用法。其实也可以改成及物动词的用法,The code check string length and buffersize for buffer overflow and gennerates an error if it occurs.代码对字符串的长度和buffer的大小进行检查(即判断字符串的长度与buffersize的大小关系),看是否存在缓冲区溢出的情况,如果存在,就报错。

2.up to 什么意思?

答:p129, "If the word begins with the consonant, the function extracts the string of consonant up to the first vowel, moves that collection of consonant to the end of the word"。

“up to”在这里的用法是“prep. until(直到)”,这里是两个词式的介词。

3.concern 什么意思?

答:p131, "Almost half the code in the function, however, is concerned with making sure that the buffer does not overflow.",concern在这里的意思是“vt. about”。

三、参考资料

1. 编程

(1)Eric S.Roberts,《Programming Abstractions in C》:https://book.douban.com/subject/2003414

2. 英语

(1)Etymology Dictionary:https://www.etymonline.com

(2) Cambridage Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)

Programming abstractions in C阅读笔记:p130-p131的更多相关文章

  1. Mongodb Manual阅读笔记:CH3 数据模型(Data Models)

    3数据模型(Data Models) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mon ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试 代码工程地址: https://github.co ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数 学习目标: 学习如何使用几何学和数字描述 Vecto ...

  8. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  9. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  10. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

随机推荐

  1. Kali下压缩解压缩命令大全zip,tar,tar.gz,tar.bz2(转)

    转自http://blog.csdn.net/yangjin_unique/article/details/7824852 tar 解包:tar xvf FileName.tar 打包:tar cvf ...

  2. drf——全局处理异常、接口文档、jwt介绍、based64编码与解码

    全局异常处理原理 # 对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理 {code:999,msg:'系统异常,请联系系统管理员'} # 只要三大认证,视图类的方法出了异常,都会执行一个函 ...

  3. 使用poi-tl导出word文件的几个技巧

    1.前言   Poi-tl提供了基于word模板文件导出word文件的功能.文档地址:http://deepoove.com/poi-tl/.   用下来,总体感觉还是很方便的.但使用过程,有几个细节 ...

  4. 驱动开发:内核LoadLibrary实现DLL注入

    远程线程注入是最常用的一种注入技术,在应用层注入是通过CreateRemoteThread这个函数实现的,该函数通过创建线程并调用 LoadLibrary 动态载入指定的DLL来实现注入,而在内核层同 ...

  5. 前端vue基于原生check增强单选多选插件

    前端vue基于原生check增强单选多选插件, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12979 效果图如下:     ...

  6. 使用Stable Diffusion生成艺术二维码

    在数字艺术的世界中,二维码已经从单纯的信息承载工具转变为可以展示艺术表达的媒介.这是通过使用Stable Diffusion的技术实现的,它可以将任何二维码转化为独特的艺术作品.接下来,我们将一步步教 ...

  7. 搭建Vue脚手架(vue-cli)

    windows下环境安装前置环境 node.js安装 https://nodejs.org/en/download/ 安装成功后打开cmd 输入如下,如果能看到node和npm的版本号了,说明已经安装 ...

  8. Vue基础介绍

    一.Vue基本介绍 1.Vue.js目前最火的的一个前端框架,三大主流前端框架之一.与其他重量级框架不同的是,Vue采用自底向上增量开发的设计.Vue的核心库只关注视图层. 2.Vue.js是一套构建 ...

  9. 使用selenium、xpath、半自动点赞、自动登录

    selenium等待元素加载 # 程序执行速度很快--->获取标签--->标签还没加载好--->直接去拿会报错 # 显示等待:当你要找一个标签的时候,给它单独加等待时间 # 隐士等待 ...

  10. 用 perfcollect 洞察 Linux 上.NET程序 CPU爆高

    一:背景 1. 讲故事 如果要分析 Linux上的 .NET程序 CPU 爆高,按以往的个性我肯定是抓个 dump 下来做事后分析,这种分析模式虽然不重但也不轻,还需要一定的底层知识,那有没有傻瓜式的 ...