Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,/37,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,第,10,章 字符串,第10章 字符串,本章学习内容,字符串常量,字符串处理函数,字符数组和字符指针,向函数传递字符串,从函数返回一个字符串指针,本章学习内容 字符串常量,10.1,字符串常量,用双引号括起的一串字符是字符串常量,,C,语言自动为其添加,0,结束符,How are you,H o w a r e y o u 0,一串以,0,结尾的字符在,C,语言中被看作字符串,10.1字符串常量用双引号括起的一串字符是字符串常量,C语言,10.2,字符串的存储,C,语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理,字符数组,每个元素都是字符类型的数组,char,str80;,H o w a r e y o u,0,H o w a r e y o u 0,是字符数组,但不代表字符串,数组的最后一个元素必须是,0,10.2字符串的存储C语言并没有为字符串提供任何专门的表示法,字符数组的初始化,用字符型数据对数组进行初始化,char,str6=C,h,i,n,a,0;,用字符串常量直接对数组初始化,char,str6=China;,char,str6=China;,字符数组的初始化用字符型数据对数组进行初始化,10.3,字符指针,C,语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理,字符串是一串用双引号引起来的字符,H e l l o C h i n a 0,字符数组就是每个元素都是字符型的数组,字符指针就是指向字符类型数据的指针,Hello China,pStr,数组最后一个元素必须是,0,才表示字符串,10.3字符指针C语言并没有为字符串提供任何专门的表示法,完,10.3,字符指针,定义和初始化方法不同,str,=,Hello China,;,H e l l o C h i n a 0,Hello China,pStr,ch,ar,str12=,Hello China,;,ch,ar,*pStr;,pStr,=,Hello China,;,str,Why?,数组名,str,是地址常量,字符指针,pStr,是变量,10.3字符指针定义和初始化方法不同 str=Hel,10.3,字符指针,定义和初始化方法不同,ch,ar,*pStr=,Hello China,;,H e l l o C h i n a 0,Hello China,pStr,ch,ar,str12=,Hello China,;,ch,ar,*pStr;,pStr=,Hello China,;,str,pStr=,10.3字符指针定义和初始化方法不同 char*pStr,按字符逐个输入,/,输出,for,(i=0;stri!=0;i+),putchar(stri);,putchar(n);,char,str10;,10.4,字符串的访问和输入,/,输出,一般不用字符串长度控制,按字符逐个输入/输出for(i=0;stri!=,按字符串整体输入,/,输出,scanf(%s,str);,printf(%s,str);,char,str10;,10.4,字符串的访问和输入,/,输出,gets(str);,puts(str);,不能输入带空格的字符串,可以输入带空格的字符串,按字符串整体输入/输出scanf(%s,str);ch,scanf(%s,str);,printf(%s,str);,char,str10;,10.4,字符串的访问和输入,/,输出,gets(str);,puts(str);,空格、回车或制表(,Tab,)符是输入数据的分隔符,因而不能被读入,输入遇到这些字符时,系统认为字符串输入结束,按字符串整体输入,/,输出,scanf(%s,str);char str10;,10.4,字符串的访问和输入,/,输出,【,例,10.1】,从键盘输入一个人名,,,把它显示在,屏幕,上,Why?,10.4字符串的访问和输入/输出【例10.1】从键盘输入一个,10.4,字符串的访问和输入,/,输出,【,例,10.1】,从键盘输入一个人名,,,把它显示在屏幕上,10.4字符串的访问和输入/输出【例10.1】从键盘输入一个,10.4,字符串的访问和输入,/,输出,【,例,10.2】,使用函数,gets(),,,从键盘输入一个带有空格的人名,然后把它显示在屏幕上,10.4字符串的访问和输入/输出【例10.2】使用函数get,10.4,字符串的访问和输入,/,输出,【,例,10.2】,使用函数,gets(),,,从键盘输入一个带有空格的人名,然后把它显示在屏幕上,不限制输入字符串的长度,易引起缓冲区溢出,,给黑客攻击以可乘之机,10.4字符串的访问和输入/输出【例10.2】使用函数get,10.4,字符串的访问和输入,/,输出,【,例,10.2】,使用函数,gets(),,,从键盘输入一个带有空格的人名,然后把它显示在屏幕上,能够,限制输入字符串的长度,10.4字符串的访问和输入/输出【例10.2】使用函数get,10.4,字符串的访问和输入,/,输出,【,例,10.3】,从键盘输入一个带有空格的人名,然后在显示人名的前面显示,Hello,I said to,10.4字符串的访问和输入/输出【例10.3】从键盘输入一个,10.4,字符串的访问和输入,/,输出,【,例,10.3】,从键盘输入一个带有空格的人名,然后在显示人名的前面显示,Hello,I said to,10.4字符串的访问和输入/输出【例10.3】从键盘输入一个,10.5,字符串处理函数,#include,strcpy(,目的字符串,源字符串,);,string copy,strlen(,字符串,);,string length,strcat(,目的字符串,源字符串,);,string combination,strcmp(,字符串,1,字符串,2);,string comparison,10.5字符串处理函数#include,计算字符串长度,#include,strlen(,字符串,);,string length,char str10=China;,printf(%d,strlen(str);,打印结果是,5,,,6,,还是,10,?,C h i n a 0 0 0 0 0,不包括,0,的实际字符的个数,计算字符串长度#include strl,计算字符串长度,#include,strlen(,字符串,);,string length,len=,strlen(str);,for,(i=0;i,=,比较大小?,if(str2=str1),if(strcmp(str2,str1)=0),字符串比较#include strcmp,字符串比较,#include,strcmp(,字符串,1,字符串,2);,string comparison,字符串是如何比较大小的?,当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,返回其,ASCII,码比较的结果值,compare,computer,compare computer,表示,strcmp(str1,str2)0,为真,字符串比较#include strcmp,【,例,10.4】,按奥运会参赛国国名在字典中的顺序对其入场次序进行排序,【例10.4】按奥运会参赛国国名在字典中的顺序对其入场次,【,例,10.4】,按奥运会参赛国国名在字典中的顺序对其入场次序进行排序,【例10.4】按奥运会参赛国国名在字典中的顺序对其入场次,10.5,字符串处理函数,10.5字符串处理函数,10.6,向函数传递字符串,向函数传递字符串时,既可使用字符数组作函数参数,也可使用字符指针作函数参数,传地址调用,10.6向函数传递字符串向函数传递字符串时,既可使用字符数组,例,10.5,:字符串复制,用字符数组编程,void,MyStrcpy(,char,dstStr,char,srcStr),int,i=0;,while,(srcStri!=0),dstStri=srcStri;,i+;,dstStri=0;,H e l l o C h i n a,0,srcStri,dstStri,H,i=0,e,i=1,l,i=2,l,i=3,o,i=4,i=5,C,i=6,h,i=7,i,i=8,n,i=9,a,i=10,0,srcStri=0,例10.5:字符串复制用字符数组编程void MySt,void,MyStrcpy(,char,*dstStr,char,*srcStr),while,(*srcStr!=0),*dstStr=*srcStr;,srcStr+;,dstStr+;,*dstStr=0;,例,10.5,:字符串复制,用字符指针编程,H e l l o C h i n a,0,*srcStr,*dstStr,H,e,l,l,o,C,h,i,n,a,0,*srcStr=0,srcStr+,srcStr,dstStr+,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,srcStr,dstStr,void MyStrcpy(char*dstStr,c,例,10.6,:计算实际字符个数,unsigned int,MyStrlen(,char,str),int,i;,unsigned int,len=0;,for,(i=0;stri!=0;i+),len+;,return,(len);,unsigned int MyStrlen(,const char,*pStr),unsigned int,len=0;,for,(;*pStr!=0;pStr+),len+;,return,(len);,方法,2,:用字符指针实现,方法,1,:用字符数组实现,统计实际字符个数(不含,0,),例10.6:计算实际字符个数 unsigned int,10.7,从函数返回字符指针,【,例,10.7】,编程实现,strcat(),的功能,10.7从函数返回字符指针【例10.7】编程实现strcat,10.7,从函数返回字符指针,【,例,10.7】,编程实现,strcat(),的功能,10.7从函数返回字符指针【例10.7】编程实现strcat,10.7,从函数返回字符指针,【,例,10.7】,编程实现,strcat(),的功能,返回字符串首地址,10.7从函数返回字符指针【例10.7】编程实现strcat,Questions and answers,Questions and answers,