好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C语言程序设计第十章课件.ppt

38页
  • 卖家[上传人]:s9****2
  • 文档编号:591383676
  • 上传时间:2024-09-17
  • 文档格式:PPT
  • 文档大小:1.24MB
  • / 38 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • C C语言程序设计第十章课语言程序设计第十章课件件 2024/9/172/37本章学习内容本章学习内容 字符串常量字符串常量  字符串处理函数字符串处理函数 字符数组和字符指针字符数组和字符指针 向函数传递字符串向函数传递字符串 从函数返回一个字符串指针从函数返回一个字符串指针 2024/9/173/3710.1字符串常量字符串常量用双引号括起的一串字符用双引号括起的一串字符是字符串常量,是字符串常量,C C语言自语言自动为其添加动为其添加′\0\0′结束符结束符"How are you""How are you"H o w a r e y o u \0H o w a r e y o u \0一串以一串以‘\0’‘\0’结尾的字符在结尾的字符在C C语言中被看做字符串语言中被看做字符串 2024/9/174/3710.2字符串的存储字符串的存储 C C C C语言并没有为字符串提供任何专门的表示法,语言并没有为字符串提供任何专门的表示法,语言并没有为字符串提供任何专门的表示法,语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理完全使用字符数组和字符指针来处理完全使用字符数组和字符指针来处理完全使用字符数组和字符指针来处理 字符数组字符数组字符数组字符数组–每个元素都是字符类型的数组每个元素都是字符类型的数组每个元素都是字符类型的数组每个元素都是字符类型的数组 charchar str[80]; str[80];H o w a r e y o u H o w a r e y o u \0\0H o w a r e y o u \0H o w a r e y o u \0是字符数组,但不代表字符串是字符数组,但不代表字符串数组的最后一个元素必须是数组的最后一个元素必须是'\0' 2024/9/175/37字符数组的初始化字符数组的初始化 用字符型数据对数组进行初始化用字符型数据对数组进行初始化 –charchar str[6] = {'C','h','i','n','a','\0'}; str[6] = {'C','h','i','n','a','\0'};  用字符串常量直接对数组初始化用字符串常量直接对数组初始化 –charchar str[6] = {"China"}; str[6] = {"China"}; –charchar str[6] = "China"; str[6] = "China"; 2024/9/176/3710.3字符指针字符指针 C C C C语言并没有为字符串提供任何专门的表示法,完语言并没有为字符串提供任何专门的表示法,完语言并没有为字符串提供任何专门的表示法,完语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理全使用字符数组和字符指针来处理全使用字符数组和字符指针来处理全使用字符数组和字符指针来处理字符串是一串用双引号引起来的字符字符串是一串用双引号引起来的字符 H e l l o C h i n a \0 H e l l o C h i n a \0 字符数组就是每个元素都是字符型的数组字符数组就是每个元素都是字符型的数组字符指针就是指向字符类型数据的指针字符指针就是指向字符类型数据的指针"Hello China"pStr数组最后一个元素必须是数组最后一个元素必须是'\0'才表示字符串才表示字符串 2024/9/177/3710.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 China"pStrpStrchar str[12] = {"Hello China"}; char *pStr;pStrpStr = "Hello China";strstr数组名数组名strstr是地址常量是地址常量 字符指针字符指针pStrpStr是变量是变量 2024/9/178/3710.3字符指针字符指针 定义和初始化方法不同定义和初始化方法不同定义和初始化方法不同定义和初始化方法不同 chcharar *pStr = *pStr = "Hello China""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 China"pStrpStrchar str[12] = {"Hello China"}; chcharar *pStr; *pStr;pStr = pStr = "Hello China""Hello China"; ;strpStr = &str[0];pStr = &str[0]; 2024/9/179/37按字符逐个输入按字符逐个输入/输出输出forfor (i=0; str[i]!='\0'; i++) (i=0; str[i]!='\0'; i++){ { putchar(str[i]); putchar(str[i]);} }putchar('\n');putchar('\n');charchar str[10]; str[10];10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出一般不用字符串长度控制一般不用字符串长度控制 2024/9/1710/37按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入/ /输出输出输出输出scanf("%s",str); printf("%s",str);charchar str[10]; str[10];10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出gets(str); puts(str);不能输入带空格不能输入带空格的字符串的字符串可以输入带空格可以输入带空格的字符串的字符串 2024/9/1711/37scanf("%s",str); printf("%s",str);charchar str[10]; str[10];10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出gets(str); puts(str);空格、回车或制空格、回车或制表(表(TabTab)符是输)符是输入数据的分隔符,入数据的分隔符,因而不能被读入,因而不能被读入,输入遇到这些字输入遇到这些字符时,系统认为符时,系统认为字符串输入结束字符串输入结束按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入/ /输出输出输出输出 2024/9/1712/3710.4字符串的访问和输入字符串的访问和输入/ /输出输出【【【【例例例例10.110.110.110.1】】】】从键盘输入一个人名从键盘输入一个人名从键盘输入一个人名从键盘输入一个人名,,,,把它显示在把它显示在把它显示在把它显示在屏幕屏幕屏幕屏幕上上上上 2024/9/1713/3710.4字符串的访问和输入字符串的访问和输入/ /输出输出【【【【例例例例10.110.110.110.1】】】】从键盘输入一个人名从键盘输入一个人名从键盘输入一个人名从键盘输入一个人名,,,,把它显示在屏幕上把它显示在屏幕上把它显示在屏幕上把它显示在屏幕上 2024/9/1714/3710.4字符串的访问和输入字符串的访问和输入/ /输出输出【【【【例例例例10.210.210.210.2】】】】使用函数使用函数使用函数使用函数gets( )gets( )gets( )gets( ),,,,从键盘输入一个从键盘输入一个从键盘输入一个从键盘输入一个带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上 2024/9/1715/3710.4字符串的访问和输入字符串的访问和输入/ /输出输出【【【【例例例例10.210.210.210.2】】】】使用函数使用函数使用函数使用函数gets( )gets( )gets( )gets( ),,,,从键盘输入一个从键盘输入一个从键盘输入一个从键盘输入一个带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上 不限制输入字符串的长度不限制输入字符串的长度易引起缓冲区溢出易引起缓冲区溢出,给黑客攻击以可乘之机,给黑客攻击以可乘之机 2024/9/1716/3710.4字符串的访问和输入字符串的访问和输入/ /输出输出【【【【例例例例10.210.210.210.2】】】】使用函数使用函数使用函数使用函数gets( )gets( )gets( )gets( ),,,,从键盘输入一个从键盘输入一个从键盘输入一个从键盘输入一个带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上带有空格的人名,然后把它显示在屏幕上 能够能够限制输入字符串的长度限制输入字符串的长度 2024/9/1717/3710.4字符串的访问和输入字符串的访问和输入/ /输出输出【【【【例例例例10.310.310.310.3】】】】从键盘输入一个带有空格的人名,然从键盘输入一个带有空格的人名,然从键盘输入一个带有空格的人名,然从键盘输入一个带有空格的人名,然后在显示人名的前面显示后在显示人名的前面显示后在显示人名的前面显示后在显示人名的前面显示"Hello", I said to "Hello", I said to "Hello", I said to "Hello", I said to 2024/9/1718/3710.4字符串的访问和输入字符串的访问和输入/ /输出输出【【【【例例例例10.310.310.310.3】】】】从键盘输入一个带有空格的人名,然从键盘输入一个带有空格的人名,然从键盘输入一个带有空格的人名,然从键盘输入一个带有空格的人名,然后在显示人名的前面显示后在显示人名的前面显示后在显示人名的前面显示后在显示人名的前面显示"Hello", I said to "Hello", I said to "Hello", I said to "Hello", I said to 2024/9/1719/3710.5字符串处理函数字符串处理函数 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);string copystrlen(字符串字符串);string lengthstrcat(目的字符串目的字符串,源字符串源字符串);string combinationstrcmp(字符串字符串1,字符串字符串2);string comparison 2024/9/1720/37计算字符串长度计算字符串长度 #include #include strlen(字符串字符串);string lengthchar str[10] = {"China"};char str[10] = {"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不包括不包括\0\0的实际字符的个数的实际字符的个数 2024/9/1721/37计算字符串长度计算字符串长度 #include #include strlen(字符串字符串);string lengthlen =len = strlen(str);strlen(str);forfor (i=0; i#include strcpy(目的字符串目的字符串,源字符串源字符串);string copy字符串能否用字符串能否用字符串能否用字符串能否用= = = =整体复制?整体复制?整体复制?整体复制?str2 = str1;str2 = str1;strcpy(str2, str1);strcpy(str2, str1);注意复制的方向!注意复制的方向!str2必须足够大!必须足够大! 2024/9/1723/37字符串复制字符串复制 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);string copy字符串能否用字符串能否用字符串能否用字符串能否用= = = =整体复制?整体复制?整体复制?整体复制?str2 = str1;str2 = str1;strcpy(str2, str1);strcpy(str2, str1);想想这个函数是如何想想这个函数是如何实现字符串复制的?实现字符串复制的? 2024/9/1724/37字符串连接字符串连接 #include #include strcat(目的字符串目的字符串,源字符串源字符串);string combinationstrcat(str2, str1);strcat(str2, str1);str2必须足够大!必须足够大!H e l l o H e l l o \0 \0 \0 \0 \0 \0\0 \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 2024/9/1725/37字符串比较字符串比较 #include #include strcmp(字符串字符串1,字符串字符串2);string comparison字符串能否用字符串能否用字符串能否用字符串能否用> > > >、、、、< < < <、、、、========比较大小?比较大小?比较大小?比较大小?if (str2 == str1)if (str2 == str1)if (strcmp(str2, str1) == 0)if (strcmp(str2, str1) == 0) 2024/9/1726/37字符串比较字符串比较 #include #include strcmp(字符串字符串1,字符串字符串2);string comparison字符串是如何比较大小的?字符串是如何比较大小的?字符串是如何比较大小的?字符串是如何比较大小的?当出现第一对不相等的字符时,就由当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,这两个字符决定所在字符串的大小,返回其返回其ASCIIASCII码比较的结果值码比较的结果值comparecomputercompare < computer compare < computer 表示表示表示表示strcmp(str1, str2) < 0strcmp(str1, str2) < 0为真为真为真为真 2024/9/1727/37 【【【【例例例例10.410.410.410.4】】】】按奥按奥按奥按奥运会参赛国国名运会参赛国国名运会参赛国国名运会参赛国国名在字典中的顺序在字典中的顺序在字典中的顺序在字典中的顺序对其入场次序进对其入场次序进对其入场次序进对其入场次序进行排序行排序行排序行排序 2024/9/1728/37 【【【【例例例例10.410.410.410.4】】】】按奥运会参赛国国名在字典中的顺序按奥运会参赛国国名在字典中的顺序按奥运会参赛国国名在字典中的顺序按奥运会参赛国国名在字典中的顺序对其入场次序进行排序对其入场次序进行排序对其入场次序进行排序对其入场次序进行排序 2024/9/1729/3710.5字符串处理函数字符串处理函数 2024/9/1730/3710.6向函数传递字符串向函数传递字符串 向函数传递字符串时,既可使用字符数组作向函数传递字符串时,既可使用字符数组作函数参数,也可使用字符指针作函数参数函数参数,也可使用字符指针作函数参数  传地址调用传地址调用 2024/9/1731/37例例10.5 :字符串复制:字符串复制 ——用字符数组编程用字符数组编程voidvoid MyStrcpy( MyStrcpy(charchar dstStr[], dstStr[], charchar srcStr[]) srcStr[]){ {intint i = 0; i = 0; whilewhile (srcStr[i] != '\0') (srcStr[i] != '\0'){ { dstStr[i] = srcStr[i]; dstStr[i] = srcStr[i]; i++; i++; } }dstStr[i] = '\0';dstStr[i] = '\0';} } H e l l o C h i n a H e l l o C h i n a \0\0 srcStr[i]srcStr[i]dstStr[i]dstStr[i]H 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=10\0\0srcStr[i]=='\0srcStr[i]=='\0 2024/9/1732/37voidvoid MyStrcpy( MyStrcpy(charchar *dstStr, *dstStr, charchar *srcStr) *srcStr){ {whilewhile (*srcStr != '\0') (*srcStr != '\0'){ { *dstStr = *srcStr; *dstStr = *srcStr; srcStr++; srcStr++; dstStr++; dstStr++; } }*dstStr = '\0'; *dstStr = '\0'; } }例例10.5 :字符串复制:字符串复制 ——用字符指针编程用字符指针编程 H e l l o C h i n a H e l l o C h i n a \0\0 *srcStr*srcStr*dstStr*dstStrH He el ll lo oC Ch hi in na a\0\0*srcStr=='\0*srcStr=='\0srcStr++srcStrdstStr++dstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStr 2024/9/1733/37例例10.6 :计算实际字符个数:计算实际字符个数 unsigned intunsigned int MyStrlen( MyStrlen(const charconst char str[]) str[]){ { intint i; i;unsigned intunsigned int len = 0; len = 0; forfor (i=0; str[i]!='\0'; i++) (i=0; str[i]!='\0'; i++) { {len++; len++; } }returnreturn (len); (len);} } unsigned int MyStrlen(unsigned int MyStrlen(const char const char *pStr)*pStr){ { unsigned intunsigned int len = 0; len = 0; forfor (; *pStr!='\0'; pStr++) (; *pStr!='\0'; pStr++) { {len++; len++; } }returnreturn (len); (len); } }  方法方法方法方法2 2 2 2:用字符指针实现:用字符指针实现:用字符指针实现:用字符指针实现 方法方法方法方法1 1 1 1:用字符数组实现:用字符数组实现:用字符数组实现:用字符数组实现统计实际字符个数统计实际字符个数(不含(不含'\0''\0')) 2024/9/1734/3710.7从函数返回一个字符串指针从函数返回一个字符串指针【【【【例例例例10.710.710.710.7】】】】编程实现编程实现编程实现编程实现strcat( )strcat( )strcat( )strcat( )的功能的功能的功能的功能 2024/9/1735/3710.7从函数返回一个字符串指针从函数返回一个字符串指针【【【【例例例例10.710.710.710.7】】】】编程实现编程实现编程实现编程实现strcat()strcat()strcat()strcat()的功能的功能的功能的功能 2024/9/1736/3710.7从函数返回一个字符串指针从函数返回一个字符串指针【【【【例例例例10.710.710.710.7】】】】编程实现编程实现编程实现编程实现strcat()strcat()strcat()strcat()的功能的功能的功能的功能 返回字符串首地址返回字符串首地址 2024/9/1737/37 Questions and answersQuestions and answersQuestions and answersQuestions and answers 结束!结束! 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.