《C语言程序设计第10章字符串ppt课件》由会员分享,可在线阅读,更多相关《C语言程序设计第10章字符串ppt课件(37页珍藏版)》请在金锄头文库上搜索。
1、第第第第10101010章章章章 字符串字符串字符串字符串2024/7/192/37本章学本章学习内容内容 字符串常量字符串常量 字符串字符串处置函数置函数 字符数字符数组和字符指和字符指针 向函数向函数传送字符串送字符串 从函数前往一个字符串指从函数前往一个字符串指针 2024/7/193/3710.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结尾的字符在
2、结尾的字符在C C言语中被看作字符串言语中被看作字符串2024/7/194/3710.2字符串的存字符串的存储储 C C C C言言言言语语语语并没有并没有并没有并没有为为为为字符串提供任何字符串提供任何字符串提供任何字符串提供任何专门专门专门专门的表示法,的表示法,的表示法,的表示法,完全运用字符数完全运用字符数完全运用字符数完全运用字符数组组组组和字符指和字符指和字符指和字符指针针针针来来来来处处处处置置置置 字符数字符数字符数字符数组组组组 每个元素都是字符每个元素都是字符每个元素都是字符每个元素都是字符类类类类型的数型的数型的数型的数组组组组 char str80;char str80
3、;char str80;char str80;H o w a r e y o u 0H o w a r e y o u 0H o w a r e y o u 0H o w a r e y o u 0是字符数组,但不代表字符串是字符数组,但不代表字符串数数组的最后一个元素必需是的最后一个元素必需是02024/7/195/37字符数字符数组的初始化的初始化 用字符型数据用字符型数据对数数组进展初始化展初始化 char str6 = char str6 = C,h,i,n,a,0; C,h,i,n,a,0; 用字符串常量直接用字符串常量直接对数数组初始化初始化 char str6 = China;
4、char str6 = China; char str6 = China;char str6 = China;2024/7/196/3710.3字符指字符指针针 C C 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/197/3710.3字符指字符指针针 定定定定义义和初始化方法不同和初始化方法不同和初始化方法不同和初始化方法不同 str = Hello China;str = 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 =
6、 Hello China; char *pStr;pStr = Hello China;strstr数数组名名str是地址常量是地址常量 字符指字符指针pStr是是变量量 2024/7/198/3710.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;strp
7、Str = &str0;2024/7/199/37按字符逐个按字符逐个输入入/输出出for (i=0; stri!=0; i+)for (i=0; stri!=0; i+) putchar(stri); putchar(stri); putchar(n);putchar(n);char str10;char str10;10.410.4字符串的字符串的字符串的字符串的访问访问访问访问和和和和输输输输入入入入/ /输输输输出出出出普通不用字符串长度控制普通不用字符串长度控制2024/7/1910/37按字符串整体按字符串整体按字符串整体按字符串整体输输入入入入/ /输输出出出出scanf(%s,
8、str); printf(%s,str);char str10;char str10;10.410.4字符串的字符串的字符串的字符串的访问访问访问访问和和和和输输输输入入入入/ /输输输输出出出出gets(str); puts(str);不能输入带空格不能输入带空格的字符串的字符串可以输入带空格可以输入带空格的字符串的字符串2024/7/1911/37scanf(%s,str); printf(%s,str);char str10;char str10;10.410.4字符串的字符串的字符串的字符串的访问访问访问访问和和和和输输输输入入入入/ /输输输输出出出出gets(str); puts(
9、str);空格、回车或制空格、回车或制表表TabTab符是输符是输入数据的分隔符,入数据的分隔符,因此不能被读入,因此不能被读入,输入遇到这些字输入遇到这些字符时,系统以为符时,系统以为字符串输入终了字符串输入终了按字符串整体按字符串整体按字符串整体按字符串整体输输入入入入/ /输输出出出出2024/7/1912/3710.4字符串的字符串的访问访问和和输输入入/输输出出【例【例【例【例10.110.110.110.1】从】从】从】从键盘输键盘输键盘输键盘输入一个人名,把它入一个人名,把它入一个人名,把它入一个人名,把它显显显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 2024/7/1913/
10、3710.4字符串的字符串的访问访问和和输输入入/输输出出【例【例【例【例10.110.110.110.1】从】从】从】从键盘输键盘输键盘输键盘输入一个人名,把它入一个人名,把它入一个人名,把它入一个人名,把它显显显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 2024/7/1914/3710.4字符串的字符串的访问访问和和输输入入/输输出出【例【例【例【例10.210.210.210.2】运用函数】运用函数】运用函数】运用函数gets()gets()gets()gets(),从,从,从,从键盘输键盘输键盘输键盘输入一个入一个入一个入一个带带带带有空格的人名,然后把它有空格的人名,然后把它有空格
11、的人名,然后把它有空格的人名,然后把它显显显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 2024/7/1915/3710.4字符串的字符串的访问访问和和输输入入/输输出出【例【例【例【例10.210.210.210.2】运用函数】运用函数】运用函数】运用函数gets()gets()gets()gets(),从,从,从,从键盘输键盘输键盘输键盘输入一个入一个入一个入一个带带带带有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它显显显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 不限制不限制输入字符串的入字符串的长度度易引起易引起缓冲区溢出,冲区溢出,给黑客攻黑
12、客攻击以可乘之机以可乘之机2024/7/1916/3710.4字符串的字符串的访问访问和和输输入入/输输出出【例【例【例【例10.210.210.210.2】运用函数】运用函数】运用函数】运用函数gets()gets()gets()gets(),从,从,从,从键盘输键盘输键盘输键盘输入一个入一个入一个入一个带带带带有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它有空格的人名,然后把它显显显显示在屏幕上示在屏幕上示在屏幕上示在屏幕上 可以限制可以限制输入字符串的入字符串的长度度2024/7/1917/3710.4字符串的字符串的访问访问和和输输入入/输输出出【例【例【例【例10
13、.310.310.310.3】从】从】从】从键盘输键盘输键盘输键盘输入一个入一个入一个入一个带带带带有空格的人名,然有空格的人名,然有空格的人名,然有空格的人名,然后在后在后在后在显显显显示人名的前面示人名的前面示人名的前面示人名的前面显显显显示示示示Hello, I said to Hello, I said to Hello, I said to Hello, I said to 2024/7/1918/3710.4字符串的字符串的访问访问和和输输入入/输输出出【例【例【例【例10.310.310.310.3】从】从】从】从键盘输键盘输键盘输键盘输入一个入一个入一个入一个带带带带有空格的人
14、名,然有空格的人名,然有空格的人名,然有空格的人名,然后在后在后在后在显显显显示人名的前面示人名的前面示人名的前面示人名的前面显显显显示示示示Hello, I said to Hello, I said to Hello, I said to Hello, I said to 2024/7/1919/3710.5字符串字符串处处置函数置函数 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);string copystrlen(字符串字符串);string lengthstrcat(目的字符串目的字符串,源字符串源字符串);string combinat
15、ionstrcmp(字符串字符串1,字符串字符串2);string comparison2024/7/1920/37计算字符串算字符串长度度 #include #include strlen(字符串字符串);string lengthchar str10 = China;char str10 = China;printf(%d, strlen(str);printf(%d, 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的实践字符的个数的
16、实践字符的个数2024/7/1921/37计算字符串算字符串长度度 #include #include strlen(字符串字符串);string lengthlen = strlen(str);len = strlen(str);for (i=0; ilen; i+)for (i=0; ilen; i+) putchar(stri); putchar(stri); putchar(n);putchar(n);用长度控制字符串输出用长度控制字符串输出2024/7/1922/37字符串复制字符串复制 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);st
17、ring copy字符串能否用字符串能否用= =整体复制?整体复制?str2 = str1;str2 = str1;strcpy(str2, str1);留意复制的方向!留意复制的方向!str2必需足够大!必需足够大!2024/7/1923/37字符串复制字符串复制 #include #include strcpy(目的字符串目的字符串,源字符串源字符串);string copy字符串能否用字符串能否用= =整体复制?整体复制?str2 = str1;str2 = str1;strcpy(str2, str1);想想这个函数是如何想想这个函数是如何实现字符串复制的?实现字符串复制的?2024/
18、7/1924/37字符串字符串衔接接 #include #include strcat(目的字符串目的字符串,源字符串源字符串);string combinationstrcat(str2, str1);str2必需足够大!必需足够大!H e l l o 0 0 0 0 0 0 0H e l l o 0 0 0 0 0 0 0 C h i n a 0 C h i n a 0H e l l o C h i n a 0 0H e l l o C h i n a 0 02024/7/1925/37字符串比字符串比较 #include #include strcmp(字符串字符串1,字符串字符串2);
19、string comparison字符串能否用字符串能否用,=比比较大小?大小?if (str2 = str1)if (str2 = str1)if (strcmp(str2, str1) = 0)2024/7/1926/37字符串比字符串比较 #include #include strcmp(字符串字符串1,字符串字符串2);string comparison字符串是如何比字符串是如何比较大小的?大小的?当出现第一对不相等的字符时,就由当出现第一对不相等的字符时,就由这两个字符决议所在字符串的大小,这两个字符决议所在字符串的大小,前往其前往其ASCIIASCII码比较的结果值码比较的结果值c
20、omparecomputercompare computer 表示表示strcmp(str1, str2) 0为为真真2024/7/1927/37 【例【例【例【例10.410.410.410.4】按奥】按奥】按奥】按奥运会参运会参运会参运会参赛赛赛赛国国名国国名国国名国国名在字典中的在字典中的在字典中的在字典中的顺顺顺顺序序序序对对对对其入其入其入其入场场场场次序次序次序次序进进进进展排序展排序展排序展排序2024/7/1928/37 【例【例【例【例10.410.410.410.4】按奥运会参】按奥运会参】按奥运会参】按奥运会参赛赛赛赛国国名在字典中的国国名在字典中的国国名在字典中的国国名
21、在字典中的顺顺顺顺序序序序对对对对其入其入其入其入场场场场次序次序次序次序进进进进展排序展排序展排序展排序2024/7/1929/3710.5字符串字符串处处置函数置函数2024/7/1930/3710.6向函数向函数传传送字符串送字符串 向函数向函数传送字符串送字符串时,既可运用字符数,既可运用字符数组作作函数参数,也可运用字符指函数参数,也可运用字符指针作函数参数作函数参数 传地址地址调用用2024/7/1931/37例例10.5 :字符串复制:字符串复制用字符数用字符数组编程程void MyStrcpy(char dstStr, char srcStr)void MyStrcpy(cha
22、r dstStr, char srcStr) int i = 0; int i = 0; while (srcStri != 0)while (srcStri != 0) dstStri = srcStri; dstStri = srcStri; i+; i+; dstStri = 0;dstStri = 0; H e l l o C h i n a 0 H e l l o C h i n a 0 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
23、 ii=8i=8n ni=9i=9a ai=10i=1000srcStri=0srcStri=02024/7/1932/37void MyStrcpy(char *dstStr, char *srcStr)void MyStrcpy(char *dstStr, char *srcStr) while (*srcStr != 0)while (*srcStr != 0) *dstStr = *srcStr; *dstStr = *srcStr; srcStr+; srcStr+; dstStr+; dstStr+; *dstStr = 0; *dstStr = 0; 例例10.5 :字符串复制:
24、字符串复制用字符指用字符指针编程程 H e l l o C h i n a 0 H e l l o C h i n a 0 *srcStr*srcStr*dstStr*dstStrH He el ll lo oC Ch hi in na a00*srcStr=0*srcStr=0srcStr+srcStrdstStr+dstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStr20
25、24/7/1933/37例例10.6 :计算算实践字符个数践字符个数 unsigned int MyStrlen(char str)unsigned int MyStrlen(char str) int i;int i;unsigned int len = 0; unsigned int len = 0; for (i=0; stri!=0; i+) for (i=0; stri!=0; i+) len+; len+; return (len);return (len); unsigned int MyStrlen(const char *pStr)unsigned int MyStrlen(
26、const char *pStr) unsigned int len = 0; unsigned int len = 0; for (; *pStr!=0; pStr+) for (; *pStr!=0; pStr+) len+; len+; return (len); return (len); 方法方法方法方法2 2 2 2:用字符指:用字符指:用字符指:用字符指针实现针实现 方法方法方法方法1 1 1 1:用字符数:用字符数:用字符数:用字符数组实现组实现统计实践字符个数践字符个数不含不含002024/7/1934/3710.7从函数前往字符指从函数前往字符指针针【例【例【例【例10.7
27、10.710.710.7】编编编编程程程程实现实现实现实现strcat()strcat()strcat()strcat()的功能的功能的功能的功能 2024/7/1935/3710.7从函数前往字符指从函数前往字符指针针【例【例【例【例10.710.710.710.7】编编编编程程程程实现实现实现实现strcat()strcat()strcat()strcat()的功能的功能的功能的功能 2024/7/1936/3710.7从函数前往字符指从函数前往字符指针针【例【例【例【例10.710.710.710.7】编编编编程程程程实现实现实现实现strcat()strcat()strcat()strcat()的功能的功能的功能的功能 前往字符串首地址前往字符串首地址2024/7/1937/37 Questions and answersQuestions and answersQuestions and answersQuestions and answers