当前课程知识点:C语言程序设计(上) >  数组(一) >  5.4 字符串处理函数 >  5.4 字符数组的输入与输出

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

5.4 字符数组的输入与输出在线视频

5.4 字符数组的输入与输出

下一节:字符串反向.c

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

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

一定不能对那些

没有结束标记的串

用这两个函数

这是我们尤其要注意的一点

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.4 字符数组的输入与输出笔记与讨论

也许你还感兴趣的课程:

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