资源描述
,一级,Click to edit Master text styles,二级,Second level,三级,Third level,四级,Fourth level,五级,Fifth level,#,点击此处编辑标题,Title,C-,字符串,字符数组,一般数组,动态数组,C-,字符串,容器,串结束标志,C-,字符串操作,计算长度,复制、拼接、比较,C-字符串字符数组,1,字符数组,数据类型为,char,,,unsigned char,的数组,作为数组操作与其他类型的数组类似,例如:,访问数组元素,输入数组元素、输出数组元素等,数组或元素在函数之间传递,堆字符数组,字符数组 数据类型为 char,unsigned char,2,C-,字符串,问题的提出,需求,字符串是程序中常用的构造数据类型(非基本数据类型),字符串是一系列字符的集合,字符串的内容应该存放在字符数组中(即:字符数组是字符串的容器),问题的提出,困难,数组(需要三要素)操作不便,解决方案,隐藏数组两要素,数据类型,(,char,或,unsigned char,),数组名 显式使用此要素,元素个数,(规定一个特殊字符作为结束标志),C-字符串问题的提出 需求,3,C-,字符串,C-,字符串(简称字符串)是存放在字符数组中的一系列有序字符,并以特殊的控制字符,0(,其,ASCII,值为,0),作为字符串的结束标志。,字符,0,被称为,C-,字符串的,串结束标志,。该字符兼容整数值,0,、布尔值“假”。,值得特别注意的是,需要事先定义一个元素个数,“,足够大,”,的字符数组,作为字符串的容器。,C-字符串C-字符串(简称字符串)是存放在字符数组中的一系列,4,C-,字符串,字符串常量,用双引号包围的一系列字符被称为字符串常量。字符串常量被存放在内存的全局数据区常量池里,并自动追加串结束标志。,字符串常量实际上是字符型常量数组,其首地址就用字符串字面常量本身表示。,char,*str = ”Im a student.”;,定义指针变量,str,,占,sizeof,(,void,*),即,4,字节;,并用字符串常量数组名(用字符串常量本身表示的地址值)对,str,进行初始化;即,str,指向常量池中的某个地址值,C-字符串 字符串常量,5,C-,字符串的操作,C+,对,C-,字符串进行了多项,适应性调整,,以方便 字符串的操作。,创建字符串,(,如下语句皆等价,),char,c15 = I, , m, , a, ,s,t,u,d,e,n,t,.,0;,char,c15 = 73, 39, 109, 32, 97, 32, 115,116,117,100,101,110,116,46, 0;,char,c15 = ”Im a student.”;,char,c = ”Im a student.”;,C-字符串的操作 C+对C-字符串进行了多项适应性调整,以,6,字符串,I/O,操作,C+,编译系统对字符型指针,(,地址值,),的输入,/,输出适应性地调整为从给定的地址处起的操作,输入,scanf(%s,地址,);,从给定的地址处起,将键盘输入的字符依次顺序存放,并将输入结束标志(空格、或换行)自动转换成串结束标志字符存放,输出,printf(%s,地址,);,从给定的地址处起,依次顺序输出字符,直到遇到串结束标志为止。,字符串I/O操作 C+编译系统对字符型指针(地址值)的输入,7,例,1.,一个有趣的英文单词,/ smart.c,#,include,int,main(),char,*p, str100 = ”smart”;,for,(p=str; *p!=0; p+),/ *p!=0,可简写为 *,p,printf(%sn, p);,printf(%d, p str);,return,0;,输出字符串,输出地址差:整数,运行结果,smart,mart,art,rt,t,5,例1. 一个有趣的英文单词 / smart.c输出字符串输,8,对目标类型为非字符型的指针,无法,“适应性”调整,因而,int,a100;,double,*p =,new,double,100;,scanf(%d, a);,/,语法错误,且,a,为地址常量,scanf(%d, p);,/,语法错误,,p,虽然为变量,printf(%d, a);,/,可行。但输出一个地址值,printf(%d, p);,/,可行。但输出一个地址值,对目标类型为非字符型的指针 无法“适应性”调整,因而,9,C-,字符串处理函数,需要,#,include,字符串的长度,函数原型:,int,strlen(,const char,*str);,功能:计算并返回给定字符串的长度,(,不计串结束标志,),例如:,”空串,长度为,0,,占,1,字节内存,存放字符,0,”,”,空格串,长度为,1,,占,2,字节内存,存放字符 空格字符,和,0,(即,32,和,0,),”3210”,长度为,4,,占用,5,个字节,分别存放字符,3,,,2,1,0,0(,即,51, 50, 49, 48, 0),C-字符串处理函数 需要 #include string.,10,C-,字符串处理函数,字符串复制,函数原型,char,*strcpy(,char,*dest,const char,*source);,功能,将源字符串,source,的内容复制到目的字符串,dest,中,返回值,复制到源字符串的串结束标志后停止复制,并返回目的 字符串的首地址,例如:,char,str100;,strcpy(str, ”Hello”);,/,将”,Hello”,存入,str,数组,返回,str,,最后输出,str,C-字符串处理函数 字符串复制,11,C-,字符串处理函数,字符串拼接,函数原型,char,*strcat(,char,*dest,const char,*source);,功能,将源字符串,source,的内容拼接到目的字符串,dest,之后,返回值,返回目的字符串的首地址,例如:,char,str1100=”Hello”, str2100=” world.”;,strcat(str1, str2;,/,则数组,str1,存放”,Hello world”,;,str2,不变,/,最后输出,str1,C-字符串处理函数字符串拼接,12,C-,字符串处理函数,字符串比较,函数原型,int,strcmp(,const char,*str1,const char,*str2);,功能,按,ASCII,值的大小比较两个字符串的内容,返回值,(MinGW C+,中返回,1, -1, 0),正数,( 1),:,str1,的内容大于,str2,的内容,负数,(-1),:,str1,的内容小于,str2,的内容,零,( 0),:,str1,的内容等于,str2,的内容,例如:,Printf(%dn, strcmp(abcd, abcdef”);,/ MinGW C+,及,Visual C+,中均输出,-1,C-字符串处理函数字符串比较,13,自定义版,C-,字符串处理函数,C-,字符串处理函数的自定义版,是练习指针处理、理解,C-,字符串的极佳素材,读者应亲自动手完成这些函数,并尝试用多种方法实现,例如:字符串长度(两种方法),函数原型设计,形式参数:字符串(可以处理字符串常量),返回类型:整型,int,StrLen(,const char,*str);,自定义版C-字符串处理函数 C-字符串处理函数的自定义版,14,Thank You !,Thank You !,
展开阅读全文