当前课程知识点:基于Linux的C++ >  第六讲 复合数据类型 >  6.2 字符 >  LinuxCPP0602

返回《基于Linux的C++》慕课在线视频课程列表

LinuxCPP0602在线视频

LinuxCPP0602

下一节:LinuxCPP0603

返回《基于Linux的C++》慕课在线视频列表

LinuxCPP0602课程教案、知识点、字幕

我们首先来看字符类型

在C++语言中定义一个字符类型的方式

是使用char关键字

看我们定义的方式char ch

定义了一个字符类型的变量ch

后来定义一个字符常量cch

并把它初始化成单一的字符‘C’

表示这个字符文字的时候

要使用单引号对

特别注意这个地方

实际存储的时候

这个字符类型的量

它事实上将会转换成一个整数来存储

它将存储的是这个字符所对应的

ASCII码值

我们可以使用signed、unsigned两个关键字

对char这个类型进行限制

正常情况下

我们不需要对它进行限制

因为如果对它进行限制的话

我们就应该使用unsigned

缺省的情况下它是signed

所有这样的量 包括字符量

如果你没有用unsigned对它进行限定

它缺省的时候是signed 是有符号的

这个字符存储一般有多大呢

正常情况下 使用8位

也就是一个字节来存储它

表达范围实际上是在-128~127之间

如果使用unsigned来限定它

正常情况下它的表达范围

其实就是0~225之间

注意 这是ASCII码

如果你是在现在的计算机下边

使用的是UNICODE字符集

正常情况下

UNICODE字符集是使用两个字节

而不是一个字节

也就是16位来表达这一个单一的字符

现在为了处理的方便

我们只考虑ASCII码

也就是说我们不考虑UNICODE的字符

当表示一个特定的字符量的时候

像这样的定义和初始化的方式

你注意

char a初始化为单引号大写的字符‘A’

第二条char a初始化为65

char a初始化成0101

char a初始化成0x41

这四个模式其实是一样的

因为这个大写的字符‘A’

它对应的ASCII码值其实就是65

八进制就是0101

然后16进制就是0x41

所以这四种表达的方式

其实是完全等价的

四种方式你用哪一个都可以

这个就是我们在计算机中常用的ASCII码

表格上面是从0到9

底下从0、10、20一直到120

你数的时候

对应的ASCII码值就是它的横和列之和

比如讲Space这个空格 就是30加2

对应ASCII码是32

按照这个方式去计算就OK了

在这个ASCII码表里边

一般来讲不需要记某个特定的字符

所对应的ASCII码值

你说要记住一些常用的当然是很好的

如果记不住 其实关系也不大

特别需要知道的就是

‘0’它事实上对应的ASCII码值

是48 而不是0

ASCII码值真正为0的那个字符

它是一个很特殊字符

我们看它写的是实际上是‘\0’

它不是真正的‘0’

这个地方说得其实不太精确

ASCII码值在我们计算机里怎么保存呢

它当然是按照一个整数来保存的

它要和这个整数构成一一映射

这个整数就是从0到127

这个ASCII码值‘\0’

在计算机内部保存的时候

保存的其实就是0

我们真正的数字‘0’

在计算机内部保存的时候

事实上保存的是ASCII码值48

记住这个地方就可以了

ASCII码表包括一系列的可见的字符

除此之外 还有一些控制字符

因为以前ASCII码表

是为通信所准备的

所以它里面还包括了一些

通信专用字符

有相当多的字符不用了

剩下的在计算机键盘上面

很多能够看到的 就叫可打印字符

有一些我们不可打印

我们只能使用一些特定的字符来表达

比如回车 实际上是不可打印的

那么我们怎么表达它呢

必须用转义字符序列来表达它

讲到回车和换行

这个地方需要特别地强调一下

因为我们现在写的程序

是Linux程序代码

很多同学操作系统用得最多的

可能是Windows或Mac

很少使用Linux操作系统

那么在这种情况下

同学们要特别记得

这个回车和换行符在Windows下面

在Linux下边 在Mac下边 是不一样的

在Windows下边

用一个双字符‘\n’、‘\r’来表达的

在Linux下边使用的是‘\n’

而在Mac下边是‘\r’

这三个操作系统所表达的回车和换行

字符格式是不一样的

所以你的文本文件

在跨操作系统平台传输的时候

如果你不处理回车和换行字符

那么这个文本换了一个操作系统

它的显示可能是不对的

这个地方可能是需要注意的

其它没什么

我们来看一个例子

怎么对这个字符量进行数学运算

我们编写一个函数

来判定某个特定的字符是不是数字

我们判定的不是它是0~9之间

我们判定的

当然应该是它在‘0’~‘9’之间

就按照这个方式去写

我写一个函数bool IsDigit

来判断一个字符c是不是一个数字

那么我们怎么判断呢

if(c>=’0’ && c<=’9’)

你注意 这第一个一定是要有单引号的

你不能写c>=0 && c <=9

这个方式就错了

那我们判断的是它的ASCII码值

在0~9之间

而不是在‘0’~‘9’之间

‘0’~‘9’之间真实的ASCII码值

或者说我们用数字

来对它进行判断的话

它在什么之间呢

它事实上是在48和57之间

判定它的时候

实际上应该写if(c>=48 && c<=57)

按照这个模式来写才对

如果我们判断是成立的

那么我们就return true 否则false

这个就是这个函数的实现

看上去很简单

就是一个if-else语句

我们再看第二个例子

我要编写一个函数

将一个特定的字符转换为

它所对应的那个大写字符

那么 这里边就有一个特别的要求

如果字符是一个英文小写字母

那我就把它转换成一个大写字母

如果它不是英文字母

或者就是一个小写的英文字母

那我就不管它 原样输出就完了

那我怎么判断这个字符

是个小写的英文字母呢

就是if(c>=’a’ &&c<=’z’) 我就return

return什么呢

return这个字符对应的那个大写英文字母

我们刚才看ASCII码表也知道

ABCDEFG、abcdefg不管大写还是小写

都是按照这个顺序排的

所以如果你知道大写字母‘A’

和小写字母‘a’之间差多远

那你就知道小写字母‘b’

和大写字母‘B’差多远

大写的字母在前边

小写的字母在后边

所以小写字母ASCII码值是大的

你记住这个就行了

那么我们怎么来去算呢

我就用c减去字符‘a’

那两者一减

其实就得到了这两个字符之间的差值

把大写字母‘A’加上去

我们按照这个方式来写可以了

这就是我们这个程序的实现

仍然是一个简单的If-else语句

但是同学们要注意的是

在这里边我使用一个数学的式子

来计算一个特定的字符c

所对应的那个大写字母应该是什么

我们实际上是把这样的字符

当成一个小整数来操作的

这种方式是完全合法的

在C++里边提供了一系列标准字符运算

当然实际上这是C的代码

C的函数库里边包括一系列字符特征

库函数它写在“ctype.h”这个头文件里

用C++模式包含这个头文件的时候

你就可以写“cctype”

它里边提供了一系列

标准字符的特征函数

标准字符的特征函数里边常用的有

Isalnum、isalpha、isdigit、islower、isupper等等

像isalnum就是判定这个字符c

是不是英文字母和数字

如果是 就返回true

否则就返回false

isdigit就是刚才我们实现的那个

就问这个字符c

它是不是一个数字

像isalpha 就问这个字符c

它是不是个英文字母

如果是 它就返回true

否则就会返回false

这个就是基本的实现

islower是不是小写

isupper是不是大写

tolower、toupper

转换成小写 转换成大写

这都是“cctype”这个头文件

给我们提供的标准字符的特征函数

基于Linux的C++课程列表:

第一讲 C/C++基本语法元素

-1.1 提纲

--LinuxCPP0101

-1.2 程序设计的基本概念

--LinuxCPP0102

-1.3 简单C/C++程序介绍

--LinuxCPP0103

-1.4 程序设计的基本流程

--LinuxCPP0104

-1.5 基本语法元素

--LinuxCPP0105

-1.6 程序设计风格

--LinuxCPP0106

-1.7 编程实践

--LinuxCPP0107

-第一讲 C/C++基本语法元素--编程实践提交入口

第二讲 程序控制结构

-2.1 提纲

--LinuxCPP0201

-2.2 结构化程序设计基础

--LinuxCPP0202

-2.3 布尔数据

--LinuxCPP0203

-2.4 分支结构

--LinuxCPP0204

-2.5 break语句

--LinuxCPP0205

-2.6 循环结构

--LinuxCPP0206

-2.7 编程实践

--LinuxCPP0207

-第二讲 程序控制结构--编程实践提交入口

第三讲 函数

-3.1 提纲

--LinuxCPP0301

-3.2 函数声明、调用与定义

--LinuxCPP0302

-3.3 函数调用栈框架

--LinuxCPP0303

-3.4 编程实践

--LinuxCPP0304

-第三讲 函数--编程实践提交入口

第四讲 算法

-4.1 提纲

--LinuxCPP0401

-4.2 算法概念与特征

--LinuxCPP0402

-4.3 算法描述

--LinuxCPP0403

-4.4 算法设计与实现

--LinuxCPP0404

-4.5 递归算法(一)

--LinuxCPP0405

-4.6 递归算法(二)

--LinuxCPP0406

-4.7 容错与计算复杂度

--LinuxCPP0407

-4.8 编程实践

--LinuxCPP0408

-第四讲 算法--编程实践提交入口

第五讲 程序组织与开发方法

-5.1 提纲

--LinuxCPP0501

-5.2 库与接口

--LinuxCPP0502

-5.3 随机数库(一)

--LinuxCPP0503

-5.4 随机数库(二)

--LinuxCPP0504

-5.5 作用域与生存期

--LinuxCPP0505

-5.6 典型软件开发流程(一)

--LinuxCPP0506

-5.7 典型软件开发流程(二)

--LinuxCPP0507

-5.8 编程实践

--LinuxCPP0508

-第五讲 程序组织与开发方法--编程实践提交入口

第六讲 复合数据类型

-6.1 提纲

--LinuxCPP0601

-6.2 字符

--LinuxCPP0602

-6.3 数组(一)

--LinuxCPP0603

-6.4 数组(二)

--LinuxCPP0604

-6.5 结构体

--LinuxCPP0605

-6.6 编程实践

--LinuxCPP0606

-第六讲 复合数据类型--编程实践提交入口

第七讲 指针与引用

-7.1 提纲

--LinuxCPP0701

-7.2 指针基本概念

--LinuxCPP0702

-7.3 指针与函数

--LinuxCPP0703

-7.4 指针与复合数据类型(一)

--LinuxCPP0704

-7.5 指针与复合数据类型(二)

--LinuxCPP0705

-7.6 字符串

--LinuxCPP0706

-7.7 动态存储管理(一)

--LinuxCPP0707

-7.8 动态存储管理(二)

--LinuxCPP0708

-7.9 引用

--LinuxCPP0709

-7.10 编程实践

--LinuxCPP0710

-第七讲 指针与引用--编程实践提交入口

第八讲 链表与程序抽象

-8.1 提纲

--LinuxCPP0801

-8.2 数据抽象(一)

--LinuxCPP0802

-8.3 数据抽象(二)

--LinuxCPP0803

-8.4 链表(一)

--LinuxCPP0804

-8.5 链表(二)

--LinuxCPP0805

-8.6 链表(三)

--LinuxCPP0806

-8.7 链表(四)

--LinuxCPP0807

-8.8 函数指针(一)

--LinuxCPP0808

-8.9 函数指针(二)

--LinuxCPP0809

-8.10 抽象链表(一)

--LinuxCPP0810

-8.11 抽象链表(二)

--LinuxCPP0811

-8.12 编程实践

--LinuxCPP0812

-第八讲 链表与程序抽象--编程实践提交入口

第九讲 类与对象

-9.1 提纲

--LinuxCPP0901

-9.2 程序抽象与面向对象

--LinuxCPP0902

-9.3 类类型

--LinuxCPP0903

-9.4 对象(一)

--LinuxCPP0904

-9.5 对象(二)

--LinuxCPP0905

-9.6 类与对象的成员(一)

--LinuxCPP0906

-9.7 类与对象的成员(二)

--LinuxCPP0907

-9.8 类与对象的成员(三)

--LinuxCPP0908

-9.9 继承(一)

--LinuxCPP0909

-9.10 继承(二)

--LinuxCPP0910

-9.11 继承(三)

--LinuxCPP0911

-9.12 多态(一)

--LinuxCPP0912

-9.13 多态(二)

--LinuxCPP0913

-9.14 编程实践

--LinuxCPP0914

-第九讲 类与对象--编程实践提交入口

第十讲 操作符重载

-10.1 提纲

--LinuxCPP1001

-10.2 四则运算符重载(一)

--LinuxCPP1002

-10.3 四则运算符重载(二)

--LinuxCPP1003

-10.4 关系与下标操作符重载

--LinuxCPP1004

-10.5 赋值操作符重载(一)

--LinuxCPP1005

-10.6 赋值操作符重载(二)

--LinuxCPP1006

-10.7 赋值操作符重载(三)

--LinuxCPP1007

-10.8 赋值操作符重载(四)

--LinuxCPP1008

-10.9 赋值操作符重载(五)

--LinuxCPP1009

-10.10 流操作符重载(一)

--LinuxCPP1010

-10.11 流操作符重载(二)

--LinuxCPP1011

-10.12 流操作符重载(三)

--LinuxCPP1012

-10.13 操作符重载总结

--LinuxCPP1013

-10.14 编程实践

--LinuxCPP1014

-第十讲 操作符重载--编程实践提交入口

第十一讲 泛型编程

-11.1 提纲

--LinuxCPP1101

-11.2 泛型编程概览

--LinuxCPP1102

-11.3 异常处理机制(一)

--LinuxCPP1103

-11.4 异常处理机制(二)

--LinuxCPP1104

-11.5 运行期型式信息(一)

--LinuxCPP1105

-11.6 运行期型式信息(二)

--LinuxCPP1106

-11.7 模板与型式参数化

--LinuxCPP1107

-11.8 题外话:术语翻译

--LinuxCPP1108

-11.9 泛型编程实践(一)

--LinuxCPP1109

-11.10 泛型编程实践(二)

--LinuxCPP1110

-11.11 泛型编程实践(三)

--LinuxCPP1111

-11.12 泛型编程实践(四)

--LinuxCPP1112

-11.13 泛型编程实践(五)

--LinuxCPP1113

-11.14 泛型编程实践(六)

--LinuxCPP1114

-11.15 泛型编程实践(七)

--LinuxCPP1115

-11.16 泛型编程实践(八)

--LinuxCPP1116

-11.17 泛型编程实践(九)

--LinuxCPP1117

-11.18 泛型编程实践(十)

--LinuxCPP1118

-11.19 编程实践

--LinuxCPP1119

-第十一讲 泛型编程--编程实践提交入口

第十二讲 Linux系统编程基础

-12.1 提纲

--LinuxCPP1201

-12.2 程序执行环境(一)

--LinuxCPP1202

-12.3 程序执行环境(二)

--LinuxCPP1203

-12.4 程序执行环境(三)

--LinuxCPP1204

-12.5 程序执行环境(四)

--LinuxCPP1205

-12.6 输入输出(一)

--LinuxCPP1206

-12.7 输入输出(二)

--LinuxCPP1207

-12.8 文件系统

--LinuxCPP1208

-12.9 设备

--LinuxCPP1209

-12.10 库(一)

--LinuxCPP1210

-12.11 库(二)

--LinuxCPP1211

-12.12 makefile文件(一)

--LinuxCPP1212

-12.13 makefile文件(二)

--LinuxCPP1213

-12.14 makefile文件(三)

--LinuxCPP1214

-12.15 编程实践

--LinuxCPP1215

-第十二讲 Linux系统编程基础--编程实践提交入口

第十三讲 进程编程

-13.01 提纲

--LinuxCPP1301

-13.02 进程基本概念

--LinuxCPP1302

-13.03 信号

--LinuxCPP1303

-13.04 进程管理(一)

--LinuxCPP1304

-13.05 进程管理(二)

--LinuxCPP1305

-13.06 进程管理(三)

--LinuxCPP1306

-13.07 进程间通信(一)

--LinuxCPP1307

-13.08 进程间通信(二)

--LinuxCPP1308

-13.09 进程间通信(三)

--LinuxCPP1309

-13.10 进程间通信(四)

--LinuxCPP1310

-13.11 进程池

--LinuxCPP1311

-13.12 编程实践

--LinuxCPP1312

-第十三讲 进程编程--编程实践提交入口

第十四讲 线程编程

-14.1 提纲

--LinuxCPP1401

-14.2 线程基本概念

--LinuxCPP1402

-14.3 线程管理(一)

--LinuxCPP1403

-14.4 线程管理(二)

--LinuxCPP1404

-14.5 线程管理(三)

--LinuxCPP1405

-14.6 线程管理(四)

--LinuxCPP1406

-14.7 线程同步机制(一)

--LinuxCPP1407

-14.8 线程同步机制(二)

--LinuxCPP1408

-14.9 C++11线程库(一)

--LinuxCPP1409

-14.10 C++11线程库(二)

--LinuxCPP1410

-14.11 C++11线程库(三)

--LinuxCPP1411

-14.12 C++11线程库(四)

--LinuxCPP1412

-14.13 C++11线程库(五)

--LinuxCPP1413

-14.14 编程实践

--LinuxCPP1414

-第十四讲 线程编程--编程实践提交入口

第十五讲 网络编程

-15.1 提纲

--LinuxCPP1501

-15.2 Internet网络协议

--LinuxCPP1502

-15.3 套接字(一)

--LinuxCPP1503

-15.4 套接字(二)

--LinuxCPP1504

-15.5 编程实践

--LinuxCPP1505

-第十五讲 网络编程--编程实践提交入口

课程文档

-课程PDF文件

LinuxCPP0602笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。