《c语言第十章(苏小红版)实用教案》由会员分享,可在线阅读,更多相关《c语言第十章(苏小红版)实用教案(38页珍藏版)》请在金锄头文库上搜索。
1、本章(bnzhn)学习内容字符串常量(chngling)字符串处理函数字符数组和字符指针向函数传递字符串从函数返回一个字符串指针第1页/共37页第一页,共38页。10.1字符串常量(chngling)用双引号括起的一串字符用双引号括起的一串字符是字符串常量,是字符串常量,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页第二页,共38页。10.2字符串的存储(cnch)C语言
2、并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针(zhzhn)来处理字符数组每个元素都是字符类型的数组charstr80;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是字符数组,但不代表字符串是字符数组,但不代表字符串数组的最后一个数组的最后一个(y )元素必须是元素必须是0第3页/共37页第三页,共38页。字符(zf)数组的初始化用字符型数据对数组进行(jnxng)初始化charstr6=C,h,i,n,a,0;用字符串常量直接对数组初始化charstr6=China;c
3、harstr6=China;第4页/共37页第四页,共38页。10.3字符(zf)指针C语言并没有(miyu)为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符串是一串用双引号引起字符串是一串用双引号引起(ynq)(ynq)来的字符来的字符 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
4、页第五页,共38页。10.3字符(zf)指针 定义和初始化方法(fngf)(fngf)不同 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 str12 = Hello China; char *pStr;pStrpStr = Hello China;strstr数组名数组名str是地址是地址(dzh)常量常量 字符指针字符指针pStr是变量是变量 第6页/共37页第六页,共38页。10.3字符(zf)指针 定义定义(dngy)(dngy)(dngy)(dngy)和
5、初始化方法不同和初始化方法不同 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 = &str0;第7页/共37页第七页,共38页。按字符逐个输入(shr)/输出forfor (i=0; stri!=0; i+) (i=0; stri!=0; i+) putchar(stri); putchar(stri); putchar(n);putch
6、ar(n);char str10;10.410.4字符串的访问字符串的访问字符串的访问字符串的访问(fngwn)(fngwn)和和和和输入输入输入输入/ /输出输出输出输出一般不用字符串长度控制一般不用字符串长度控制第8页/共37页第八页,共38页。按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入(shr)/(shr)/输出输出输出输出scanf(%s,str); printf(%s,str);charchar str10;10.410.4字符串的访问和输入字符串的访问和输入字符串的访问和输入字符串的访问和输入(shr)/(shr)/输出输出输出输出gets(str); put
7、s(str);不能输入带空格不能输入带空格的字符串的字符串可以输入带空格可以输入带空格的字符串的字符串第9页/共37页第九页,共38页。scanf(%s,str); printf(%s,str);char str10;10.410.4字符串的访问字符串的访问字符串的访问字符串的访问(fngwn)(fngwn)和输入和输入和输入和输入/ /输出输出输出输出gets(str); puts(str);空格、回车或制空格、回车或制表(表(TabTab)符是输)符是输入数据的分隔符,入数据的分隔符,因而不能被读入,因而不能被读入,输入遇到这些字输入遇到这些字符时,系统认为符时,系统认为字符串输入结束字符
8、串输入结束按字符串整体输入按字符串整体输入按字符串整体输入按字符串整体输入(shr)/(shr)/输出输出输出输出第10页/共37页第十页,共38页。10.4字符串的访问(fngwn)和输入/输出【例10.1】从键盘输入一个(y)人名,把它显示在屏幕上第11页/共37页第十一页,共38页。10.4字符串的访问(fngwn)和输入/输出【例10.1】从键盘输入一个(y)人名,把它显示在屏幕上第12页/共37页第十二页,共38页。10.4字符串的访问(fngwn)和输入/输出【例10.2】使用函数gets(),从键盘输入一个(y)带有空格的人名,然后把它显示在屏幕上第13页/共37页第十三页,共3
9、8页。10.4字符串的访问(fngwn)和输入/输出【例10.2】使用函数(hnsh)gets(),从键盘输入一个带有空格的人名,然后把它显示在屏幕上不限制输入字符串的长度不限制输入字符串的长度易引起缓冲区溢出易引起缓冲区溢出,给黑客攻击以可乘之机,给黑客攻击以可乘之机第14页/共37页第十四页,共38页。10.4字符串的访问(fngwn)和输入/输出【例10.2】使用函数gets(),从键盘输入一个(y)带有空格的人名,然后把它显示在屏幕上能够能够限制输入字符串的长度限制输入字符串的长度第15页/共37页第十五页,共38页。10.4字符串的访问(fngwn)和输入/输出【例10.3】从键盘输
10、入一个带有空格的人名,然后在显示(xinsh)人名的前面显示(xinsh)Hello,Isaidto第16页/共37页第十六页,共38页。10.4字符串的访问和输入(shr)/输出【例10.3】从键盘输入一个带有空格的人名,然后在显示(xinsh)人名的前面显示(xinsh)Hello,Isaidto第17页/共37页第十七页,共38页。10.5字符串处理函数#include strcpy(目的目的(md)字符串字符串,源字符串源字符串);string copystrlen(字符串字符串);string lengthstrcat(目的目的(md)字符串字符串,源字符串源字符串);string
11、combinationstrcmp(字符串字符串1,字符串字符串2);string comparison第18页/共37页第十八页,共38页。计算(jsun)字符串长度#include strlen(字符串字符串);string lengthchar str10 = China;char str10 = China;printf(%d, strlen(str);printf(%d, strlen(str);打印打印打印打印(d yn)(d yn)结果是结果是结果是结果是 5 5、6 6,还是,还是,还是,还是1010? C h i n a 0 0 0 0 0 C h i n a 0 0 0 0
12、 0不包括不包括00的实际字符的个数的实际字符的个数第19页/共37页第十九页,共38页。计算(jsun)字符串长度#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);用长度控制字符串输出用长度控制字符串输出第20页/共37页第二十页,共38页。字符串复制(fzh)#include strcpy(目的目的(md)字符串字符串
13、,源字符串源字符串);string copy字符串能否字符串能否(nn fu)(nn fu)用用= =整体复制?整体复制?str2 = str1;str2 = str1;strcpy(str2, str1);注意复制的方向!注意复制的方向!str2必须足够大!必须足够大!第21页/共37页第二十一页,共38页。字符串复制(fzh)#include strcpy(目的目的(md)字符串字符串,源字符串源字符串);string copy字符串能否字符串能否(nn fu)(nn fu)用用= =整体复制?整体复制?str2 = str1;str2 = str1;strcpy(str2, str1);
14、想想这个函数是如何想想这个函数是如何实现字符串复制的?实现字符串复制的?第22页/共37页第二十二页,共38页。字符串连接(linji)#include strcat(目的目的(md)字符串字符串,源字符串源字符串);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页第二十三页,共38页。字符串
15、比较(bjio)#include strcmp(字符串字符串1,字符串字符串2);string comparison字符串能否字符串能否(nn fu)(nn fu)用用 、 、=比比较大小?较大小?if (str2 = str1)if (str2 = str1)if (strcmp(str2, str1) = 0)第24页/共37页第二十四页,共38页。字符串比较(bjio)#include strcmp(字符串字符串1,字符串字符串2);string comparison字符串是如何比较字符串是如何比较(bjio)大小的?大小的?当出现第一对不相等的字符时,就由当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,这两个字符决定所在字符串的大小,返回其返回其ASCIIASCII码比较的结果值码比较的结果值comparecomputercompare computer 表示表示(biosh)strcmp(str1, str2) 、=比较大小。统计实际字符个数(不含0)第三十八页,共38页。