《C语言程序设计第十章课件.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计第十章课件.pptx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本章学习内容 字符串常量 字符串处理函数 字符数组和字符指针 向函数传递字符串 从函数返回一个字符串指针 第1页/共37页10.1字符串常量用双引号括起的一串字符用双引号括起的一串字符是字符串常量,是字符串常量,C C语言自语言自动为其添加动为其添加00结束符结束符How are youHow are youH o w a r e y o u 0H o w a r e y o u 0一串以一串以00结尾的字符在结尾的字符在C C语言中被看做字符串语言中被看做字符串第2页/共37页10.2字符串的存储C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符数组每个元素都是字
2、符类型的数组char str80;H o w a r e y o u H o w a r e y o u 00H o w a r e y o u 0H o w a r e y o u 0是字符数组,但不代表字符串是字符数组,但不代表字符串数组的最后一个元素必须是数组的最后一个元素必须是0第3页/共37页字符数组的初始化用字符型数据对数组进行初始化 char str6=C,h,i,n,a,0;用字符串常量直接对数组初始化 char str6=China;char str6=China;第4页/共37页10.3字符指针C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符串
3、是一串用双引号引起来的字符字符串是一串用双引号引起来的字符 H e l l o C h i n a 0 H e l l o C h i n a 0 字符数组就是每个元素都是字符型的数组字符数组就是每个元素都是字符型的数组字符指针就是指向字符类型数据的指针字符指针就是指向字符类型数据的指针Hello ChinapStr数组最后一个元素必须是数组最后一个元素必须是0才表示字符串才表示字符串第5页/共37页10.3字符指针 定义和初始化方法不同定义和初始化方法不同 strstr=Hello China;H e l l o C h i n a 0 H e l l o C h i n a 0 Hello
4、 ChinapStrpStrchar str12=Hello China;char*pStr;pStrpStr=Hello China;strstr数组名数组名strstr是地址常量是地址常量 字符指针字符指针pStrpStr是变量是变量 第6页/共37页10.3字符指针 定义和初始化方法不同定义和初始化方法不同 char*pStr=Hello China;H e l l o C h i n a 0 H e l l o C h i n a 0 Hello ChinapStrpStrchar str12=Hello China;char*pStr;pStr=Hello China;strpStr
5、=&str0;第7页/共37页按字符逐个输入/输出forfor(i=0;stri!=0;(i=0;stri!=0;i+)i+)putchar(stri);putchar(stri);putchar(n);putchar(n);charchar str10;str10;10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/输出输出输出输出一般不用字符串长度控制一般不用字符串长度控制第8页/共37页按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入/输出输出输出输出scanf(%s,str);printf(%s,str);charchar str1
6、0;str10;10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/输出输出输出输出gets(str);puts(str);不能输入带空格不能输入带空格的字符串的字符串可以输入带空格可以输入带空格的字符串的字符串第9页/共37页scanf(%s,str);printf(%s,str);charchar str10;str10;10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/输出输出输出输出gets(str);puts(str);空格、回车或制空格、回车或制表(表(TabTab)符是输)符是输入数据的分隔符,入数据的
7、分隔符,因而不能被读入,因而不能被读入,输入遇到这些字输入遇到这些字符时,系统认为符时,系统认为字符串输入结束字符串输入结束按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入/输出输出输出输出第10页/共37页10.4字符串的访问和输入/输出【例10.1】从键盘输入一个人名,把它显示在屏幕上 第11页/共37页10.4字符串的访问和输入/输出【例10.1】从键盘输入一个人名,把它显示在屏幕上 第12页/共37页10.4字符串的访问和输入/输出【例10.2】使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上 第13页/共37页10.4字符串的访问和输入/输出【
8、例10.2】使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上 不限制输入字符串的长度不限制输入字符串的长度易引起缓冲区溢出易引起缓冲区溢出,给黑客攻击以可乘之机,给黑客攻击以可乘之机第14页/共37页10.4字符串的访问和输入/输出【例10.2】使用函数gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上 能够能够限制输入字符串的长度限制输入字符串的长度第15页/共37页10.4字符串的访问和输入/输出【例10.3】从键盘输入一个带有空格的人名,然后在显示人名的前面显示Hello,I said to 第16页/共37页10.4字符串的访问和输入/输出【例10
9、.3】从键盘输入一个带有空格的人名,然后在显示人名的前面显示Hello,I said to 第17页/共37页10.5字符串处理函数#include strcpy(目的字符串目的字符串,源字符串源字符串);string copystrlen(字符串字符串);string lengthstrcat(目的字符串目的字符串,源字符串源字符串);string combinationstrcmp(字符串字符串1,字符串字符串2);string comparison第18页/共37页计算字符串长度#include strlen(字符串字符串);string lengthchar str10=China;c
10、har str10=China;printf(%d,printf(%d,strlen(str);strlen(str);打印结果是打印结果是 5 5、6 6,还是,还是1010?C h i n a 0 0 0 0 0 C h i n a 0 0 0 0 0不包括不包括00的实际字符的个数的实际字符的个数第19页/共37页计算字符串长度#include strlen(字符串字符串);string lengthlen=len=strlen(str);strlen(str);forfor(i=0;ilen;i+)(i=0;ilen;i+)putchar(stri);putchar(stri);put
11、char(n);putchar(n);用长度控制字符串输出用长度控制字符串输出第20页/共37页字符串复制#include strcpy(目的字符串目的字符串,源字符串源字符串);string copy字符串能否用字符串能否用=整体复制?整体复制?str2=str1;strcpy(str2,str1);注意复制的方向!注意复制的方向!str2必须足够大!必须足够大!第21页/共37页字符串复制#include strcpy(目的字符串目的字符串,源字符串源字符串);string copy字符串能否用字符串能否用=整体复制?整体复制?str2=str1;strcpy(str2,str1);想想这
12、个函数是如何想想这个函数是如何实现字符串复制的?实现字符串复制的?第22页/共37页字符串连接#include strcat(目的字符串目的字符串,源字符串源字符串);string combinationstrcat(str2,str1);str2必须足够大!必须足够大!H e l l o H e l l o 0 0 0 0 0 00 0 0 0 0 0 0 0 C h i n a 0C h i n a 0H e l l o H e l l o C h i n a 0C h i n a 0 0 0第23页/共37页字符串比较#include strcmp(字符串字符串1,字符串字符串2);st
13、ring comparison字符串能否用字符串能否用、=比较大小?比较大小?if(str2=str1)if(strcmp(str2,str1)=0)第24页/共37页字符串比较#include strcmp(字符串字符串1,字符串字符串2);string comparison字符串是如何比较大小的?字符串是如何比较大小的?当出现第一对不相等的字符时,就由当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,这两个字符决定所在字符串的大小,返回其返回其ASCIIASCII码比较的结果值码比较的结果值comparecomputercompare computer 表示表示strcmp(
14、str1,str2)0为真为真第25页/共37页 【例例10.410.4】按奥运按奥运会参赛国国名在会参赛国国名在字典中的顺序对字典中的顺序对其入场次序进行其入场次序进行排序排序第26页/共37页 【例例10.410.4】按奥运会参赛国国名在字典中的顺序对按奥运会参赛国国名在字典中的顺序对其入场次序进行排序其入场次序进行排序第27页/共37页10.5字符串处理函数第28页/共37页10.6向函数传递字符串向函数传递字符串时,既可使用字符数组作函数参数,也可使用字符指针作函数参数 传地址调用第29页/共37页例10.5:字符串复制 用字符数组编程void MyStrcpy(char dstStr
15、,char srcStr)int i=0;while(srcStri!=0)dstStri=srcStri;i+;dstStri=0;H e l l o C h i n a H e l l o C h i n a 00 srcStrisrcStridstStridstStriH Hi=0i=0e ei=1i=1l li=2i=2l li=3i=3o oi=4i=4 i=5i=5C Ci=6i=6h hi=7i=7i ii=8i=8n ni=9i=9a ai=10i=1000srcStri=0srcStri=0第30页/共37页void MyStrcpy(char*dstStr,char*src
16、Str)while(*srcStr!=0)*dstStr=*srcStr;srcStr+;dstStr+;*dstStr=0;例10.5:字符串复制 用字符指针编程 H e l l o C h i n a H e l l o C h i n a 00 *srcStr*srcStr*dstStr*dstStrH He el ll lo oC Ch hi in na a00*srcStr=0*srcStr=0srcStr+srcStrdstStr+dstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstS
17、trsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStr第31页/共37页例10.6:计算实际字符个数 unsigned int MyStrlen(const char str)int i;unsigned int len=0;for(i=0;stri!=0;i+)len+;return(len);unsigned int MyStrlen(unsigned int MyStrlen(const char const char*pStr)*pStr)unsigned intunsigned int len=0;len=0;fo
18、rfor(;*pStr!=0;pStr+)(;*pStr!=0;pStr+)len+;len+;returnreturn(len);(len);方法方法方法方法2 2 2 2:用字符指针实现:用字符指针实现:用字符指针实现:用字符指针实现 方法方法方法方法1 1 1 1:用字符数组实现:用字符数组实现:用字符数组实现:用字符数组实现统计实际字符个数(不含0)第32页/共37页10.7从函数返回一个字符串指针【例10.7】编程实现strcat()的功能 第33页/共37页10.7从函数返回一个字符串指针【例10.7】编程实现strcat()的功能 第34页/共37页10.7从函数返回一个字符串指针【例10.7】编程实现strcat()的功能 返回字符串首地址返回字符串首地址第35页/共37页Questions and answers第36页/共37页感谢您的欣赏!第37页/共37页