当前课程知识点:C语言程序设计 > 第7章 数组 > 7.7 字符串数组 > 字符串数组
同学们
大家好
今天我们来学习C语言中的字符串数组
首先让我们来介绍一下字符串数组概念
在前面的章节当中
我们已经学习到
我们可以使用一个一维的字符数组
来表示一个字符串
那么
我们又怎么样来表示一个字符串的数组呢
原理很简单
我们可以使用二维的字符数组
来表示一个一维的字符串数组
由于二维数组的元素是一个一维数组
它刚好对应到一个字符串
因而可以用二维字符数组
来表示一个一维的字符串数组
类似的
如果需要表示更多维的字符串数组
我们可以通过再增加一个维度来实现
比如
使用三维的字符数组
来表示一个二维的字符串数组
下面我们来看一个例子
例7.9
有三个字符串
要求找出其中最大的字符串
通过这个例子
我们可以把有关字符数组的
相关概念作一个综合应用
首先我们应该考虑如何表达
三个字符串组成的数据结构
正如我们上面所学到的
我们可以使用一个二维的字符数组
来表示字符串一维数组
剩下的问题就是
我们如何依次输入这三个字符串
应该首先想到
使用gets函数来替代scanf函数
第二
我们应该考虑
两个字符串之间如何进行比较呢
这要用到我们前面所讲到的strcmp函数
第三
我们又如何保存当前字符串值
最大的那个字符串呢
这里不能使用直接的赋值运算
可以考虑使用前面学过的
strcpy函数来实现相应的功能
有了上述的算法思想以后
我们就可以来看看这段程序了
程序的开始
我们首先定义一个用来存放当前值
最大的字符串的一个字符数组
它应该是一个一维字符数组
然后定义用来存放
三个字符串的二维的字符数组
通过一个循环调用gets函数
来依次输入每一个字符串
这个地方要注意
我们在使用该函数时
函数参量
str中括弧i
只用到了一个下标
而str数组是一个二维数组
有同学就感到疑惑
这是否是语法错误呢
回答是
不是
因为str是一个二维的字符数组
当我们只提供了一个下标时
它就对应到一个一维的字符数组
刚好对应可以存放
一个字符串的一维字符数组
下面
我们通过一条if语句
判断str[0]和str[1]的大小关系
也就是第一个字符串和第二个字符串的大小
如果str[0]大于str[1]
则把str[0]保存到数组string当中
否则把str[1]保存到数组string当中
经过这个if的判断
我们把两个字符串中的较大者
保存到了数组string当中
下一步
我们再比较str[2]
第三个字符串
和string两个字符串的大小
如果str[2]大于string
我们就把str[2]赋值给string
显然
这个时候
string字符数组中保存的是
这三个字符串当中的最大值
需要注意的是
在进行两个字符串的比较过程当中
不能直接使用关系运算符
而应该使用我们前面所介绍的字符串
比较函数strcmp
类似的
在进行两个字符串的赋值操作时
也同样不能直接使用赋值运算符
而要使用我们前面所学过的strcpy函数
来实现相应的功能
注意上述程序的这种比较方法
显然是有问题的
如果是4个字符串
我们又该如何比较它们的大小
如果是5个
6个字符串甚至更多个字符串
我们又该如何编写这段程序呢
显然
这些字符串的比较过程
更适合用一个循环来实现
有关它的实现方法
同学们可以自己私下去思考或编写
有关字符串数组的内容
我们今天就讲到此为止
同时我们这一章整个数组的
主要内容我们也介绍完了
谢谢大家
再见
-计算思维与计算机
--计算思维与计算机
--计算思维与计算机
--计算思维和计算机
-2.1 程序设计语言的发展及其特点和应用
--程序设计语言的特点及发展
- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤
--C语言程序的结构和编制步骤
-3.1 C语言的数据类型
--C语言的数据类型
--C语言的数据类型
-3.2 常量
--常量
--常量
-3.3 什么是变量
--什么是变量
--什么是变量
-3.4 如何进行算术运算
--如何进行算术运算
--如何进行算术运算
-3.5 赋值运算符和逗号运算符
--赋值运算符和逗号运算符
-3.6 数据类型转换
--数据类型转换
--数据类型转换
-4.1 格式化输出printf
--格式化输出
-4.2 格式化输入scanf及字符数据的非格式化输入输出
--格式化输入
-5.1 关系运算符和关系表达式
--关系运算符和关系表达式
-5.2 逻辑运算符和逻辑表达式
--逻辑运算符和逻辑表达式
-5.3 条件运算符和条件表达式
--条件运算符和条件表达式
-5.4 if语句
--if语句
--if语句
-5.5 switch语句
--switch语句
--switch语句
-6.1 while语句
--while语句
--while语句
--do-while语句
-6.2 for语句
--for语句
--for语句
-6.3 循环的嵌套
--循环的嵌套
--循环的嵌套
-6.4 break语句和continue语句
--break和continue语句
-7.1 一维数组的定义和引用
--一维数组的定义和引用
-7.2 一维数组的赋值
--一维数组的赋值
--一维数组的赋值
-7.3 二维数组的定义和引用
--二维数组的定义和引用
-7.4 二维数组的赋值
--二维数组的赋值
--二维数组的赋值
-7.5 字符串的本质
--字符串的本质
--字符串的本质
-7.6 字符串操作的常用函数
--字符串常用函数
-7.7 字符串数组
--字符串数组
--字符串数组
-8.1 函数概述
--函数概述
--函数概述
-8.2 有参函数
--有参函数
--有参函数
-8.3 函数参数的传递方式
--函数参数的传递方式
-8.4 变量的作用域和生存期
--变量的作用域和生存期
-8.5 变量的存储类型
--变量的存储类型
--变量的存储类型
-8.6 函数的嵌套和递归调用
--函数的嵌套和递归调用
-8.7 函数的作用域与封装
--函数的作用域与封装
-9.1 指针变量的概念(上)
--指针变量的概念(上)
-9.2 指针变量的概念(下)
--指针变量的概念(下)
-9.3 指向一维数组的指针变量
--指向一维数组的指针变量
-9.4 指向二维数组的指针变量(上)
--指向二维数组的指针变量(上)
-9.5 指向二维数组的指针变量(下)
--指向二维数组的指针变量(下)
-9.6 动态内存分配
--动态内存分配
--动态内存分配
-10.1 编译预处理
--编译预处理
-11.1 用户自己建立数据类型
--用户自己建立数据类型
-11.2 定义结构体类型变量
--定义结构体类型变量
-11.3 结构体变量的引用与初始化
-11.4 结构体数组
--结构体数组
--结构体数组
-11.5 指向结构体类型数据的指针
--指向结构体类型数据的指针
-12.1 文件的基本概念和文件指针
--文件的基本概念和文件指针
-12,2 文件的打开和关闭
--文件的打开和关闭
--文件的打开和关闭
-12.3 文本文件读写
--文本文件读写
--文本文件读写
-12.4 二进制文件读写
--二进制文件读写
--二进制文件读写