《C语言程序设计第10章字符串课件》由会员分享,可在线阅读,更多相关《C语言程序设计第10章字符串课件(37页珍藏版)》请在金锄头文库上搜索。
1、第第第第10101010章章章章 字符串字符串字符串字符串2024/7/272/37本章学习内容本章学习内容本章学习内容本章学习内容字符串常量字符串常量字符串字符串处理函数理函数字符数字符数组和字符指和字符指针向函数向函数传递字符串字符串从函数返回一个字符串指从函数返回一个字符串指针 2024/7/273/3710.110.1字符串常量字符串常量字符串常量字符串常量用双引号括起的一串字符用双引号括起的一串字符是字符串常量,是字符串常量,C C语言自语言自动为其添加动为其添加00结束符结束符How are youHow are youH o w a r e y o u 0H o w a r e
2、y o u 0一串以一串以00结尾的字符在结尾的字符在C C语言中被看作字符串语言中被看作字符串2024/7/274/3710.210.2字符串的存储字符串的存储字符串的存储字符串的存储 C C语语言并没有言并没有言并没有言并没有为为字符串提供任何字符串提供任何字符串提供任何字符串提供任何专门专门的表示法,的表示法,的表示法,的表示法,完全使用字符数完全使用字符数完全使用字符数完全使用字符数组组和字符指和字符指和字符指和字符指针针来来来来处处理理理理 字符数字符数字符数字符数组组每个元素都是字符每个元素都是字符每个元素都是字符每个元素都是字符类类型的数型的数型的数型的数组组 charchar
3、str80; 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是字符数组,但不代表字符串是字符数组,但不代表字符串数组的最后一个元素必须是数组的最后一个元素必须是02024/7/275/37字符数组的初始化字符数组的初始化字符数组的初始化字符数组的初始化 用字符型数据用字符型数据对数数组进行初始化行初始化 charchar str6 = C,h,i,n,a,0; str6 = C,h,i,n,a,0; 用字符串常量直接用字符串常量直接对数数组初始化初始化 charchar str
4、6 = China; str6 = China; charchar str6 = China; str6 = China;2024/7/276/3710.310.3字符指针字符指针字符指针字符指针 C C语语言并没有言并没有言并没有言并没有为为字符串提供任何字符串提供任何字符串提供任何字符串提供任何专门专门的表示法,完的表示法,完的表示法,完的表示法,完全使用字符数全使用字符数全使用字符数全使用字符数组组和字符指和字符指和字符指和字符指针针来来来来处处理理理理字符串是一串用双引号引起来的字符字符串是一串用双引号引起来的字符 H e l l o C h i n a 0 H e l l o C h
5、 i n a 0 字符数组就是每个元素都是字符型的数组字符数组就是每个元素都是字符型的数组字符指针就是指向字符类型数据的指针字符指针就是指向字符类型数据的指针Hello ChinapStr数组最后一个元素必须是数组最后一个元素必须是0才表示字符串才表示字符串2024/7/277/3710.310.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 ChinapStrpStrchar st
6、r12 = Hello China; char *pStr;pStrpStr = Hello China;strstr数组名数组名strstr是地址常量是地址常量 字符指针字符指针pStrpStr是变量是变量 2024/7/278/3710.310.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; c
7、har *pStr;pStr = Hello China;strpStr = &str0;2024/7/279/37按字符逐个输入按字符逐个输入按字符逐个输入按字符逐个输入/ /输出输出输出输出forfor (i=0; stri!=0; i+) (i=0; stri!=0; i+) putchar(stri); putchar(stri); putchar(n);putchar(n);charchar str10; str10;10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出一般不用字符串长度控制一般不用字符串长度控制202
8、4/7/2710/37按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入/ /输出输出输出输出scanf(%s,str); printf(%s,str);charchar str10; str10;10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出gets(str); puts(str);不能输入带空格不能输入带空格的字符串的字符串可以输入带空格可以输入带空格的字符串的字符串2024/7/2711/37scanf(%s,str); printf(%s,str);charchar str10; str10;10.4
9、10.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出gets(str); puts(str);空格、回车或制空格、回车或制表(表(TabTab)符是输)符是输入数据的分隔符,入数据的分隔符,因而不能被读入,因而不能被读入,输入遇到这些字输入遇到这些字符时,系统认为符时,系统认为字符串输入结束字符串输入结束按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入/ /输出输出输出输出2024/7/2712/3710.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出【例
10、例例例10.110.1】从从从从键盘输键盘输入一个人名入一个人名入一个人名入一个人名,把它把它把它把它显显示在示在示在示在屏幕屏幕屏幕屏幕上上上上 2024/7/2713/3710.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出【例例例例10.110.1】从从从从键盘输键盘输入一个人名入一个人名入一个人名入一个人名,把它把它把它把它显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 2024/7/2714/3710.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出【例例例
11、例10.210.2】使用函数使用函数使用函数使用函数gets()gets(),从从从从键盘输键盘输入一个入一个入一个入一个带带有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 2024/7/2715/3710.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出【例例例例10.210.2】使用函数使用函数使用函数使用函数gets()gets(),从从从从键盘输键盘输入一个入一个入一个入一个带带有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然
12、后把它有空格的人名,然后把它显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 不限制输入字符串的长度不限制输入字符串的长度易引起缓冲区溢出易引起缓冲区溢出,给黑客攻击以可乘之机,给黑客攻击以可乘之机2024/7/2716/3710.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出【例例例例10.210.2】使用函数使用函数使用函数使用函数gets()gets(),从从从从键盘输键盘输入一个入一个入一个入一个带带有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它显显示在屏幕上示在屏幕上示在屏幕上示在
13、屏幕上 能够能够限制输入字符串的长度限制输入字符串的长度2024/7/2717/3710.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入/ / / /输出输出输出输出【例例例例10.310.3】从从从从键盘输键盘输入一个入一个入一个入一个带带有空格的人名,然有空格的人名,然有空格的人名,然有空格的人名,然后在后在后在后在显显示人名的前面示人名的前面示人名的前面示人名的前面显显示示示示Hello, I said to Hello, I said to 2024/7/2718/3710.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问
14、和输入/ / / /输出输出输出输出【例例例例10.310.3】从从从从键盘输键盘输入一个入一个入一个入一个带带有空格的人名,然有空格的人名,然有空格的人名,然有空格的人名,然后在后在后在后在显显示人名的前面示人名的前面示人名的前面示人名的前面显显示示示示Hello, I said to Hello, I said to 2024/7/2719/3710.510.5字符串处理函数字符串处理函数字符串处理函数字符串处理函数 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);string copystrlen(字符串字符串);string lengthst
15、rcat(目的字符串目的字符串,源字符串源字符串);string combinationstrcmp(字符串字符串1,字符串字符串2);string comparison2024/7/2720/37计算字符串长度计算字符串长度计算字符串长度计算字符串长度 #include #include strlen(字符串字符串);string lengthchar str10 = China;char str10 = China;printf(%d,printf(%d, strlen(str);strlen(str);打印结果是打印结果是 5 5,6 6,还是,还是1010? C h i n a 0 0
16、 0 0 0 C h i n a 0 0 0 0 0不包括不包括00的实际字符的个数的实际字符的个数2024/7/2721/37计算字符串长度计算字符串长度计算字符串长度计算字符串长度 #include #include strlen(字符串字符串);string lengthlen =len = strlen(str);strlen(str);forfor (i=0; ilen; i+) (i=0; ilen; i+) putchar(stri); putchar(stri); putchar(n);putchar(n);用长度控制字符串输出用长度控制字符串输出2024/7/2722/37字
17、符串复制字符串复制字符串复制字符串复制 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);string copy字符串能否用字符串能否用= =整体复制?整体复制?str2 = str1;strcpy(str2, str1);注意复制的方向!注意复制的方向!str2必须足够大!必须足够大!2024/7/2723/37字符串复制字符串复制字符串复制字符串复制 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);string copy字符串能否用字符串能否用= =整体复制?整体复制?str2 = str1;strcpy
18、(str2, str1);想想这个函数是如何想想这个函数是如何实现字符串复制的?实现字符串复制的?2024/7/2724/37字符串连接字符串连接字符串连接字符串连接 #include #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 020
19、24/7/2725/37字符串比较字符串比较字符串比较字符串比较 #include #include strcmp(字符串字符串1,字符串字符串2);string comparison字符串能否用字符串能否用,=比较大小?比较大小?if (str2 = str1)if (strcmp(str2, str1) = 0)2024/7/2726/37字符串比较字符串比较字符串比较字符串比较 #include #include strcmp(字符串字符串1,字符串字符串2);string comparison字符串是如何比较大小的?字符串是如何比较大小的?当出现第一对不相等的字符时,就由当出现第一对不
20、相等的字符时,就由这两个字符决定所在字符串的大小,这两个字符决定所在字符串的大小,返回其返回其ASCIIASCII码比较的结果值码比较的结果值comparecomputercompare computer 表示表示strcmp(str1, str2) 0为真为真2024/7/2727/37 【例例例例10.410.410.410.4】按奥按奥按奥按奥运会参赛国国名运会参赛国国名运会参赛国国名运会参赛国国名在字典中的顺序在字典中的顺序在字典中的顺序在字典中的顺序对其入场次序进对其入场次序进对其入场次序进对其入场次序进行排序行排序行排序行排序2024/7/2728/37 【例例例例10.410.4
21、10.410.4】按奥运会参赛国国名在字典中的顺序按奥运会参赛国国名在字典中的顺序按奥运会参赛国国名在字典中的顺序按奥运会参赛国国名在字典中的顺序对其入场次序进行排序对其入场次序进行排序对其入场次序进行排序对其入场次序进行排序2024/7/2729/3710.510.5字符串处理函数字符串处理函数字符串处理函数字符串处理函数2024/7/2730/3710.610.6向函数传递字符串向函数传递字符串向函数传递字符串向函数传递字符串 向函数向函数传递字符串字符串时,既可使用字符数,既可使用字符数组作作函数参数,也可使用字符指函数参数,也可使用字符指针作函数参数作函数参数 传地址地址调用用2024
22、/7/2731/37例例例例10.5 10.5 :字符串复制:字符串复制:字符串复制:字符串复制用字符数组编程用字符数组编程用字符数组编程用字符数组编程voidvoid MyStrcpy( MyStrcpy(charchar dstStr, dstStr, charchar srcStr) srcStr) intint i = 0; i = 0; whilewhile (srcStri != 0) (srcStri != 0) dstStri = srcStri; dstStri = srcStri; i+; i+; dstStri = 0;dstStri = 0; H e l l o C h
23、 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=02024/7/2732/37voidvoid MyStrcpy( MyStrcpy(charchar *dstStr, *dstStr, charchar *srcStr) *srcStr) whilewhile (*srcStr != 0) (
24、*srcStr != 0) *dstStr = *srcStr; *dstStr = *srcStr; srcStr+; srcStr+; dstStr+; dstStr+; *dstStr = 0; *dstStr = 0; 例例例例10.5 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
25、=0srcStr+srcStrdstStr+dstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStr2024/7/2733/37例例例例10.6 10.6 :计算实际字符个数:计算实际字符个数:计算实际字符个数:计算实际字符个数 unsigned intunsigned int MyStrlen( MyStrlen(charchar str) str) intint i; i;
26、unsigned intunsigned int len = 0; len = 0; forfor (i=0; stri!=0; i+) (i=0; stri!=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+
27、; len+; returnreturn (len); (len); 方法方法方法方法2 2 2 2:用字符指针实现:用字符指针实现:用字符指针实现:用字符指针实现 方法方法方法方法1 1 1 1:用字符数组实现:用字符数组实现:用字符数组实现:用字符数组实现统计实际字符个数统计实际字符个数(不含(不含00)2024/7/2734/3710.710.7从函数返回字符指针从函数返回字符指针从函数返回字符指针从函数返回字符指针【例例例例10.710.7】编编程程程程实现实现strcat()strcat()的功能的功能的功能的功能 2024/7/2735/3710.710.7从函数返回字符指针从函数
28、返回字符指针从函数返回字符指针从函数返回字符指针【例例例例10.710.7】编编程程程程实现实现strcat()strcat()的功能的功能的功能的功能 2024/7/2736/3710.710.7从函数返回字符指针从函数返回字符指针从函数返回字符指针从函数返回字符指针【例例例例10.710.7】编编程程程程实现实现strcat()strcat()的功能的功能的功能的功能 返回字符串首地址返回字符串首地址2024/7/2737/37 Questions and answersQuestions and answersQuestions and answersQuestions and answers