- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中的字符串.ppt
C语言中的字符串 教师:柳宏川 郑州大学信息工程学院 主要内容 字符串 字符串结束标志 字符数组 指向字符串的指针 问题引入 所有的C程序都做同一件事,观察一个字符,然后啥也不干。 ——Peter Weinberger 从编译器的角度来看C的字符串。 从系统处理的角度来看C的字符串。 从物理存储上来看C的字符串。 ! EMAIL:IEHCLIU@ZZU.EDU.CN 郑州大学信息工程学院 柳宏川 * EMAIL:IEHCLIU@ZZU.EDU.CN 郑州大学信息工程学院 柳宏川 1.字符串和字符串结束标志 字符串字面量的描述方式: 用一对双引号括起的任意字符序列就是一个字符串。例如:“Beijing” 对于程序中写出的一个字符串字面量,系统将用字符数组的形式对其进行存储;分配连续的若干个存储单元,把字符串中的字符按顺序存储,每个字符占据一个字节。 一个特殊的规定:在存储了字符串常量的所有字符之后,还有另外存一个空字符‘\0’作为字符串的结束标志。 字符数组就是以字符作为元素的数组。 字符数组也是数组,其定义方式与其它数组没有什么区别。 对于字符数组,定义时进行初始化也可以像其它数组一样。 2.字符数组 c[9] c[8] c[7] c[6] c[5] c[4] c[3] c[2] c[1] c[0] y p p a h m a I 【例如】把10个字符分别赋给 c[0]到c[9]的10个元素。 char c[10]={‘I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’}; 例如:“Beijing”虽然它只有 7 个字符,其内部表示却要占据 8 个字节的存储单元。 \0 g n i j i e B 3.字符串与字符数组的关系 有效字符串的长度与存放字符串的数组长度是两个不同的概念。 例如,定义一个字符数组长度为 100,而实际有效字符只有 40个。 4.程序中怎样才能从字符串的内部表示确定其结束的位置呢? 在处理字符串时进行顺序检查,遇到空字符就表示遇到了字符串的结束。 /*是字符串*/ ‘x’ ‘\0’ ‘k’ ‘o’ char d[4] = {‘o’,’k’,’\0’,’x’}; /*是字符串*/ 0 ‘\0’ ‘k’ ‘o’ char c[4] = {‘o’,’k’,’\0’}; /*是字符串*/ 0 ‘d’ ‘a’ ‘b’ char b[4] = {‘b’,’a’,’d’}; /*不是字符串,缺少空字符*/ ‘d’ ‘o’ ‘o’ ‘g’ char a[4] = {‘g’,’o’,’o’,’d’}; char a[18] = ”Hi!\0Good\0morning!\0”; 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 \0 ! n g \0 r m o d o o \0 i G \0 ! i H 【例】是字符串吗? a或a[0]:表示字符串“Hi!” a[1]:表示字符串“i!” a[3]:表示空字符串“” a[5]:表示字符串“ood” a[12]:表示字符串“ing!” 系统处理处理字符串的做法:从一个字节的地址开始,向后进行顺序扫描,遇到第一个空字符null(‘\0’)的字节,这两个字节之间的字符序列就是一个字符串。 再看前面的例子 系统会怎么看待该字符数组? /*不是字符串,缺少空字符*/ ‘d’ ‘o’ ‘o’ ‘g’ char a[4] = {‘g’,’o’,’o’,’d’}; 作为字符数组:在下标0到3的范围内对每一个数组元素进行访问,逻辑上都没问题。 作为字符串:从数组名表示的地址(a[0])开始,向后进行顺序扫描,逻辑上在数组范围内是碰不到‘\0’的,逻辑上不是字符串。但计算机内存是连续的,该字符数组只是内存字节序列中的一段,在最后一个元素a[3]后物理上依然存在字节。在这些字节中,每个字节的二进制数据就代表着一个ASCII码字符,肯定会有一个字节存储的是空字符null(‘\0’)的,这两个字节之间的字符序列就是一个字符串。当然, a[3]后的字符不是逻辑上的字符串。 int main() {int i; char ch1[5]={ZYXWV}; char a[20]=ABCDE\0FGHIJ\0KLMNOP; char ch2[5]={abcde}; scanf(%s,a[3]); printf(%s\n,a); printf(%s\n,a[3]); printf(%s\n,a[5]); printf(%s\n,a[9]); printf(%s\n,a[12]); printf(%s\n,a); for(i=-3;i=22;i++)
文档评论(0)