当前课程知识点:C语言程序设计(上) > 数组(一) > 5.4 字符串处理函数 > 5.4 字符数组的输入与输出
接下来我们看
字符串处理函数
我们大家知道
c的一个
非常大的特点
是它有
丰富的函数库
这丰富的函数库
在字符处理方面
表现的尤为显著
我们随便
翻一本书
或者我们随便的从网上
去输入一个关键字
字符处理的函数
我们就会看到
n多个
就是
罗列
以及
它对这些所有函数的
应用的一个实例
都是非常全的
我在这
输入了一个c语言中
字符串处理函数
就会有
许多的朋友
说道自己在学习的过程里边
开始对这个
理解的不够
后来对这个多么重视
这些函数对自己提供了
多么方便的帮助
所以
相信
各位
朋友
也肯定是在学习的过程里边
找到了一些这样的帮助
而且也体会了
这些函数对我们
带来的方便
那这里边
我们列了几个
比如说这个是一个字符串
复制的函数
字符串拼接的函数
字符串比较的函数
还有我们用到过的
测字符串长度的函数等等
我们用省略号
它实在是太多了
那么
我们下边要关注的是什么呢
是
这两个函数
gets和puts
是字符串的
输入
和字符串的输出的函数
那
这里边你看
我给了一个c语言中的
字符串处理函数的
相关的书籍
就有
这么多
这些相关的书籍是什么呢
关于函数处理的
就是字典
有薄的有厚的
大全之类的
如果我们有效
用到的
其实这些不必要记
只要理解了它是怎么用
这任何一个手册
任何一本书可以当作手册
自己用到的时候
翻一翻
对我们还是很有帮助的
那我们
下边看这两个函数
gets和puts
它们分别干嘛呢
这是
非常对称的一个
两个函数
前边我们看到strlen里边用的是
字符数组的名字
它的参数是字符数组的名字
我们看gets和puts
里边也是
字符数组的名字
那么它们的功能是什么呢
gets
是从
你的终端设备的
像我们用的终端设备是什么呢
就是键盘
我们从键盘上敲一串字符
到你敲满意了为止
你按回车
这一串字符
将进入到你这个数组里
大家一听下来
这里边的约束是什么呢
我定义的这个数组
如果只有
十个元素
可是我敲了二十个字符
有用吗
没有用
但是也不会错
你敲的多余的是没有用啦
它只取了你
你定的十个元素
它就取了前九个
那么后边那一个
它没有
放进去
为什么呢
是gets
不是get
它是当作一个串的
所以它自动的给你
在最后一个元素里
加上了结束标
那puts是同样的道理
是从你给的
这个数组名字的那个地址号开始
一直到
斜杠0结束的那个位置
把这个数组里边的
所有字符
输出在
你的终端设备上
我们用的终端设备
就是显示器
我们就输出到显示器上
如果你的终端设备
定义了是打印机
那它就
输出到打印机上
那我们看一下
这块的
一个应用的例子
这个例子我们给了一个
输入一行
字符串
把这个字符串
反序
之后再输出
那也就是说
首尾对调了
把这一行字符串
首尾对调
那大家
想想这块的思路应该是什么样子呢
首先是开一个数组
这没有问题了
你开一个数组
获得这个串
就是
给这个数组里
把这个串先放进去
比如说我们开了一个数组
叫s t r
str
那我们首先是要
给这个str里边放上
字符
那我们这个数组到底多长呢
如果说我定义了这个数组是100
那你整整好放了99个字符吗
是因为你数它太辛苦了
所以
通常我们是开一个
足够大的数组
然后敲的时候呢
我们输入的时候呢
却不一定那么数着
那么这时候呢
你的字符串
到底实际的字符串是多长
要去求一下
当然
我们最简单的方式
strlen
就可以
求这个字符串的长度
那这里边就是说
获得这个字符串
并求得这的长度
下来我们要做的什么事情呢
首尾交换
我们且不说首尾交换怎么做
首尾只要交换成功
我们就把这个
字符数组输出
这个事情就完成了
那我们
接下来是不是
要做的
这里边
要值得分析的
是说
怎么进行这个首尾交换呢
大家看
假如说
我这str里边
送进去的字符是
abcdef一直到k
最后它一定会
是斜杠0的
为什么呢
我们敲的时候
我肯定不愿意一个一个数
就用我们刚才说的
或者我用初始化的方式
或者是
当我什么时候
就不能用初始化的方式呢
比如说我现在在录一本书
那我们能用初始化的方式吗
肯定不能啦
我是今天录一些明天录一些
那么这时候
肯定是用
另一种方式
那我们肯定也不会用
scanf的方式
那刚才咱说的
gets
就是一种方式
那如果我们把这个
gets进去以后
我要进行首尾交换
也就是说
你把a
放在这个位置
把k
放在这个位置
怎么做这件事呢
大家看一下
如果
我们这样设变量
前面
这个数组的前边
我从0开始
后边呢
算了它的长度了
长度是n
那我就从n开始
假如说我这n
现在是
10的话
那我从10开始
那我就是要做
这个str
i位置上的
和str j位置上的
这两个元素进行交换
交换完了应该做什么呢
j往前走一步
也就是说
它从10往后退一个
i往前进一个
刚才
我们已经做了这样的调换
那么下边呢
我们
位置往前进一个
这个位置往后倒一个
再做
b和j的交换
b和j的交换
交换完成
再同样做
i往前进一个
j往后退一个
然后进行它俩的交换
那么这样的事情一直做
多少个呢
做到哪里为止
大家看
一定是做到
什么情况下我会继续做
i一定是小于j的
j是往后退的
会退到
8 7 6
它会走的
4 5 6
那一定是
i小于j的时候
我会继续做
等它俩相等的时候
就不用做了
这就是
这道题的算法
那我们把它写下来的话
首位交换怎么做呢
这样做
i从哪里开始
从0开始
到谁结束呢
到小于j
那就是说到等于j
我就不做了
那j从谁开始呢
一定是从你
数了这个数有多长
这个数有多长
那这个元素的下标
元素的个数
如果整个是10的话
那你是从
str10开始吗
那一定不是啊
一定是从
那个下标的元素
一定是比10少一个的
所以我从
n-1开始
你数的数是n的话
我一定是从n-1开始
到哪里呢
一定是要到
大于i的
那个地方
我是一定在做的
到谁就不做了呢
等于i就不做了
等于i
所以呢
是一直在大于i的时候
我就一定在做
等于i的时候
就不做了
在这个期间
我们永远判断的是哪个条件呢
i小于j吗
只要小于j就做交换
这就是这道题的思路
如果首尾交换
这个循环进行完了
首尾交换就完成了
那么新的一个数组
就是
这个数组里的序
已经被全部交换完了
我们再把它输出
我们看一下
这个程序
大家看一下
在这个程序里边
我们定义了
str
给了是80
元素是给了80个
然后下边呢
提示一下要输入了
我们用什么方式输入呢
刚才咱说的
gets
gets里边
用什么呢
很简单
就是数组的名字
咱们的数组现在是
就可以啦
那么执行的这个函数调用的时候
程序会停在哪
等你
从键盘上敲
一直到你敲完了回车为止
回车
程序继续往下走
这是做什么呢
测你刚才敲的
实际上敲了多少个字符呢
然后进入下边的循环
在这个循环体里边
我们看
咱刚才说的
i从0开始
而j从n-1开始
判断的条件是什么呢
i小于j
我就一直在做
i是往前进
j是往后退
在这个过程中
用c作一个中间变量
来进行交换
最后
出了这个循环
事情完成了
我们用什么呢
这个数组的名字
应该
就是这个程序
大家看看还有没有问题
这块不要
运行一下看看
提示我们输入一个串
咱们为了能看清楚
我们输入的这个串
我们这样
再给
差不多
给了几个
我们不管他了
现在
我们看这是刚才输入的
现在进行了交换
最后一个6
是第一个了
第一个的a
是最后一个了
进行了
两两反置
那这里边我们刚才说
最主要的一个环节是什么呢
它数了一下
你刚才实际输入了多少呢
我就拿它
作为循环终值的控制
那这里边
还返回头来
我们说
它关键的一个环节还是
用了非常好用的
gets
获得了
给这个
字符数组里获得了
字符
用puts
来输出
这个字符数组里的内容
这是非常方便的
两个函数
当然
如果我们用
另一种方式
我把这句话
写在这
我们这样
如果这个串
我想用scanf去读的话
我也可以这样
就后边写数组的名字
不要写数组元素了
这样也是
一次性的可以读的
printf
这样也是可以输出的
我们拿过去看一下
把这个
printf
我们把这一行
先注释掉
然后呢
咱们再
这个引号
再看还有没有什么不对的
看一下能不能得到
就是我们相当于说
不用puts了
我用了printf
但是我用的什么呢
str这样的格式
百分号s的这样的格式
但是
我后边仍然用的是
数组的名字
百分号s
就是说我要输出一个串
这个串你只要告诉我
这个串从哪里开始
数组的名字就是一个地址号
就从这开始
到哪里结束
一定是到斜杠0结束
所以
如果你前边不是用的grts
你是用的scanf
一个一个读进来的数
将没有那个斜杠0
所以
如果你是用scanf
那样的方式读进来的
那这时候是不可以
用这个
百分号s的格式
或者puts的格式的
那是因为我们
gets得到的
这一定就是可以的
我们现在随便试一个
然后在后边也
我们看
正确交换
那现在用的是谁呢
用的是
printf
百分号s的
这样的格式
那么
这块我们是想告诉大家什么呢
puts
这里边我们要达到的目的
就是把这个
字符数组里的东西输出来
必然是puts要方便的多
所以
凡是这种需求
大家一般的都会简单的用
puts这种方式
获取字符串也会用
gets的这种方式
我们刚才说了
同样你要用这两种方式
这个scanf和printf
也不是不可以
但是要注意
这用的是百分号s
那这里边
一定要注意的是
这四个函数
无论哪一个
你对应的都是什么呢
你生成的
gets和scanf
生成的是什么呢
带结束标记的串
那你puts和printf
一定不能对那些
没有结束标记的串
用这两个函数
这是我们尤其要注意的一点
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html