当前课程知识点:C语言程序设计(上) >  数组(一) >  5.3 一维字符串数组 >  5.3 一维字符串数组11.24~1

返回《C语言程序设计(上)》慕课在线视频课程列表

5.3 一维字符串数组11.24~1在线视频

5.3 一维字符串数组11.24~1

下一节:用函数测试字符串长度.c

返回《C语言程序设计(上)》慕课在线视频列表

5.3 一维字符串数组11.24~1课程教案、知识点、字幕

大家好

我们再来看一下用一维数组的方式

来处理字符串

我们知道在c里边

是没有专门的字符串变量的

那通常 处理字符串的方式

一个方式就是数组的方式

当然我们还有 比如说指针的方式

在我们下个学期会介绍

用指针的方式处理字符串

数组也是一个非常有效的方式

那怎么做 大家看一下

如果我们char了一个c数组

这个数组是6个元素

那我们现在给的一个

初始化的方式是用

双引号引起来的五个字符

那么它在内存里的存储的情况是这样的

五个字符后面加上\0

\0是谁给它加进去的呢

是因为

我们初始化的形式是双引号引起来的

我们知道双引号引起来的

就一定是一个字符串

那么这个\0是自动加进去的

这就是字符串数组的

存储规则

那这个规则使我们有一个问题

那这个串长到底是多少呢

比如说对于这个数组来说

那它到底是5个长度还是6个

在内存里实际占了6个没有问题

但是串长是多少呢

C里边 有一个这样的函数

是专门测字符数组的长度的

我们看strlen

里边是说

是这个字符数组的名字

我们知道

数组的名字就是一个地址号

那这个函数的功能就是

从这个地址号开始

从头开始数 一个一个数

到底有多长呢

数到谁为止 数到\0

那还是有一个问题 \0算没算它的长度呢

那我们用一个小程序来看一下

这段小程序里边有很多注释掉的

大家先不用看这个注释掉的

因为这个本身很简单

就一句话是说

定义这个ch

我们这不是叫c 叫ch 这个数组

然后给里边初始化的是CHINA五个字符

然后说你给我测这个ch里边到底是多长

把测出来的送到n

然后printf这个n

就这很简单

只是要说明的一块这多了一个include

包含到谁呢 string.h

它是所有字符串处理函数的头文件

都在这里边

所以大家只要用到了字符串处理函数

就需要include这个

.h文件

那我们运行一下看

初始化的ch

然后测出来的

ch里边到底是5还是6呢

5

那也就是说

它并没有算后边的\0

那在这个程序里边

我们实际上

有这么几点需要大家注意

一个是这个头文件要包含

只要涉及到字符处理函数

就要包含这个头文件

第二件事情是说

我们用到了这个字符串

测试这个字符串长度

测的是谁呢

这里边一定是

这个ch是个数组的名字

它不能是简单变量的名字

也不能是字符的变量的名字

不能是就这一个字符的这个变量的名字

所以呢

我们这里边一定是一个

字符数组的名字

然后还有一个是说 初始化

那这个字符数组的初始化

我们看是双引号引起来的

它自动加上了一个\0

那我们关注的是

它还有别的方式初始化吗

像数值型的数据

它有说省略长度啊

它有说给部分元素初始化啊

那个字符型的数组可以吗

可以 我们看一下

像这个 这是我们刚才用的这种方式

然后呢 这是说

我只给前两个数组元素初始化

这个是说

我省了长度了

它按你给的字符自动加进去

那加5个还是加6个呢

当然这时候是加6个

它一定是说

把那个结束标记也预留出来了

是因为我们现在用的是双引号

那么除过这种方式还有一种方式

是这样一个一个字符进行初始化

那么这种情况是为了干嘛呢

通常是说

我就是不要这个结束标记了

我此刻的应用就不需要这个结束标记

但是它的危险在哪呢

如果没有这个结束标记

你要用那个

测长度啊

你要用后边的字符串处理的

整体的输入输出函数啊

对它都会有问题

所以通常呢

我们一个元素一个元素做的时候

你也可以把这个结束标记加进去

除非我们现在说就是不要这种情况

那我们也来把它看一下

比如说这是我们刚才看到的这个情况

我们把这个字符数组给它输出一下

我把这个注释拿掉

这是一个for循环里边

进行printf的是什么呢

这个数组元素

一个一个元素按位置输出

从哪 里0号到5号

到下标为5的那个元素

那不都是结束标记吗

那我们现在正好看一下

那个结束标记到底是什么 长什么样

我们是用c格式

那咱看那个结束标记到底长什么样

结束标记不是我们想象的那个\0

因为前边 这些也都是数值

那它\0对着的那个字符

是长这样

那这样大家有点不大相信

有点担心它是那个\0吗

那我们这样子

我们给一个用这格式输出这样可以吗

把字符当数值输出

我们看是不是我们给的那个\0呢

\0没有问题

那我们说 可以给部分元素初始化吗

当然没有问题

我们给部分元素初始化

那我现在测出来的长度到底是多少呢

我部分元素初始化从

前面两个有第三个就是结束标记了

那现在应该测出来是2

那剩下的从3号元素往后的呢

都是那个\0

现在长度是2

后边的都是这个结束标记

这是我们说

这种初始化的方式

那我们下边还在关注一个问题

如果我们是这样的一种方式

对它进行的初始化

那后边就没有那个结束标记了

我们还先看这种初始化的方式

那我们这样测出来

会是一个什么效果呢

我们刚才不是说

它从前边开始数 数到\0为止

而你现在在这块

我们在这块呢非说

你不要给我加\0了

我一个字符一个字符初始化

我后边就是没有\0

那测出来是什么呢

我们也去看一下

那就是这一行我不是这样子的

我把它注释掉

把这个 那我们现在就是这个情况

就是这样进行的初始化

那这样初始化我们看下边还缺什么吗

不缺了

咱看现在我们数出来的数到底是多少呢

我们这样数出来的数呢还是5个

最后是个结束标记

我们刚才说这块有结束标记吗

我们没有给它结束标记

可是呢

这边却看见了结束标记

为什么呢

我们在做数值型的数据初始化的时候

就说过这件事

只要我们给第一号元素放了0

后边全部都是0

那么这个也是一样的

如果我们给前边都放了

都初始化了

而后边那个元素会变成什么呢

会变成\0

就变成0

然后我们看

咱只送两个看看

只初始化两个

我们看两个 后边全部变成了0

大家看

定义了一个数组 没有给它初始化

我是用scanf给它读的数

可以不可以啊

这是读数组

这是把它输出

读完了以后我们就进行了一个测试

那我们看一下

我们读这个数组的时候

还给咱刚才做的china

读完了吗

如果完了我们回车

我们输出的是数值

应该这是

1 2 3 4 5

最后我们理论上应该是结束标记

可是我们刚才没有给结束标记

而且它现在数出来的数是多少

15

为什么15呢

这不1 2 3 4 5 6

加上这个才6

为什么会是15呢

大家回来看

这个数组里边

我们刚才挑的这几个字符

我们还把它按字符看吧

按字符看着大家比较清楚

我们还用大写的CH

然后我们回车

现在说 它数的数是多少啊 15

我分明只敲了5个

它数的数是15 为什么呢

就是说它现在往后

这个函数测的是说

从你的首地址

往后一个一个数数到\0为止

而你刚才送的里边

没有给\0

那它就是自然的在你那数组区域里边

没挡了

它一直往下数

数到第15个元素的时候正好碰到了0

那它就自然结束了

所以这时候

统计出来的这个函数的使用就不准确了

统计出来的就不是

你敲进去的那个字符的个数

那这块我们强调的是说

当你的字符 数组里边

最后没有结束标记的时候

我们要在使用字符串处理函数的时候

就是尤其要注意

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

5.3 一维字符串数组11.24~1笔记与讨论

也许你还感兴趣的课程:

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