当前课程知识点:C语言程序设计 > 第22讲 编程训练 > 编程训练 > 字符串(上)
字符串是一串以0结尾的字符序列
在计算机科学中有一些专门针对它的算法
这一讲就是让大家初步掌握字符串的定义与常用操作
我们先看一下字符串常量
一串以0结尾的字符在C语言中被看做字符串
注意这个地方这个写法
在字符串中它有时候就写成‘\0’
但实际上它这个地方就是一个数字0
那么写成\0是为了以示区别
就是以防你把它看成那个字符0
用双引号括起来的一串字符是一个字符串常量
c语言会自动为其添加0结束符
我们看一下字符串的存储
C语言并没有为字符串提供任何专门的表示法
可以使用字符数组和字符指针来处理
字符数组是每个元素都是字符类型的数组
比如说像这样定义char str[80]
就是定义一个有80个字符的这样一个字符数组
那么如果这个地方你在字符数组当中只是放了字符
然后这个尾巴地方并没有加0
那么它仅仅是一个字符数组
但不能代表字符串
只有在数组的最后一个元素是0的这种情况下
前面的这个才成为一个字符串
我们看一下这是通过字符数组
以及字符指针来表示字符串的方式
这样定义字符数组
然后直接通过双引号初始化
前面说过
有双引号这样的话它系统会自动在后面带一个0
这是字符指针的方式
那么可以写成这样
这两种形式看起来挺类似的
但实际上还是有差别的
在字符数组当中
这些信息的存储区域和字符指针的存储区域是不同的
这个地方的hello china是字符常量
这个字符常量在后期是不可修改的
当然这个知识是稍微深入一点的知识
字符串有几种不同的输入输出方式
分别是按字符逐个输入输出
以及按字符串整体输入输出
整体输入输出又分两种方法
我们先看一下按字符逐个输入输出
这演示的是按字符逐个输出的方式
就是从字符数组下标为0的地方开始到最后
就是我们前面说过字符串的结束以0结束
所以这个判断条件不为0的时候
那么就用putchar来输出这个字符
循环的每次输出一个字符
那么从头到尾就可以把整个字符串输出出来
当然这个地方你也可以用printf来输出
输入跟这个很类似
输入的时候
你可以通过getchar或者scanf来输入
注意输入完了以后
最后在字符数组最后需要补一个0
那么这个地方在控制的时候
通常我们就用判断它是不是结束来作为这个控制
偶尔也会用求字符串长度的方式来控制
这个在后面字符串函数中会介绍
我们看一下按字符串整体输入输出
这儿你首先定义了一个这样的字符数组
然后你输入的时候可以按整体就是%s这个控制符
然后再把数组名一写
这是整体输入
整体输出的时候也是用%s
这个就可以把字符数组当中或者说字符串整个输出
这是整体输入输出的另一种形式
使用函数gets以及puts
那么前面的这种方法在输入的时候不能输入带空格的字符串
什么意思呢 就是比如说你输入一个hello world
那么这样它输入的时候只能把hello放到这个str里面
那么空格后面的字符串都输入不进去
就是这种方式它认为当你输入一个空格的时候它就结束了
而这种方式可以输入带空格的字符串
它是以输入回车作为结束
所以这种方式更常用一点
而且看起来写的也比较简单一些
所以这种更常见
常用的字符串处理函数包括求字符串的长度strlen
字符串复制函数strcpy
字符串拼接函数strcat
字符串比较函数strcmp
这就刚介绍的字符串长度 字符串拷贝 字符串拼接 字符串比较
注意使用这几个函数的时候
需要在前面包含当中加上include
我们先看一下计算字符串长度的这个函数
我们看
就是你定义了这样的字符串
然后输出这个字符串长度的时候
那么它到底打印结果是5、6还是10呢
我们看一下
这个地方它在计算的时候
它计算的是不包括0的实际的字符个数
所以对这个字符串来说
它的字符串长度是5
我们前面说过
字符串逐个输出的时候控制的时候
你可以判断字符串是不是结束
用那种方式
那么你也可以通过这种就是先求出来
字符串长度然后根据下标值这样来控制
下面我们看一下字符串复制函数
在这个地方需要特别强调的是
字符串不能用等号进行整体复制
比如说你前面定义了两个字符串
一个叫str2
一个叫str1
那么你试图把str1整体复制给str2
但是你不能这么写
就是说整数、浮点数这些东西可以通过等号进行赋值
但是字符串不行
要想实现刚才这个想法
就是把str1整体复制给str2的话
你只能使用strcpy这个函数
注意这个复制的方向
就是在这个函数当中
str1是源
str2是目标
那么因为你要把这个数据整体复制到这个里面
所以str2的空间应该是大于等于str1的
我们看一下字符串的拼接函数
这个拼接函数也是第一个参数是目的字符串
第二个参数是源字符串
同样的
str2也要足够大
因为这个函数实现的是把str1这个字符串拼在str2的后面
所以它预先在str2当中要留有足够的容量放这个str1
我们看这是两个字符串
str2是hello
它原本定义的时候它的空间有这么大
str1是这个china,把它两个拼接在一起后
拼出来就是hellochina
这个地方还留有一个余量
我们再看一下字符串比较函数
字符串比较函数这个地方也需要强调的是
在字符串比较大小的时候
不能直接通过这种==、>、< 直接来判断
那么你要想判断两个字符串是否完全等同
你需要这样来做
就是strcmp(str2, str1)通过这个函数来判断
看它是不是等于0
等于0的话就说明这两个字符串完全相同
字符串它比较大小的时候是如何工作的呢
它是这样
就是两个字符串先从开始的字母开始比较
相同就往后比
然后到这个地方不相同了
不相同了然后它出来的结果是
这个字符a的ASCII码减去字符u的ASCII码
然后减完以后得到的结果
因为这个地方a的ASCII码比u的ASCII码小
所以减完以后就得到一个负数
如果结果得到一个负数的话
你就知道前面的这个字符串比这个字符串小
比如这个str1它是compare
str2是computer
那么通过strcmp来进行比较的话
那这个比较结果小于0就是真的
-作业
-作业
-作业
-作业
-作业
-作业
-作业
-作业
-循环类型
-作业
-程序结构
-函数基础
-作业
-数组基础
-作业
-作业
-作业
-作业
-程序调试
- 文件(上)
- 编程训练