《第10章 字符串07571.ppt》由会员分享,可在线阅读,更多相关《第10章 字符串07571.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第十章第十章 字符串字符串第一节 用一维数组表示字符串C语言中没有字符串变量,在输入“姓名”这类数据时采用何种方式呢?采用的是字符数组一、几个概念1、字符串的结束标志 0 上一页下一页暂 停重 放系统返 回休息2、字符串的长度 0以前的字符个数,不包括 0 3、字符串常量的存放 存放于内存中一片连续单元二、用字符数组表示字符串的方法例:例:char b10char b10=“Computer=“Computer”;”;Computer0b0b1b2b3b4b5b6b7b8b9 char b10=C,o,m,p,u,t,e,r;Computer b0b1b2b3b4b5b6b7b8b9上一页下
2、一页暂 停重 放系统返 回休息说明:说明:在给一维数组赋值时,应注意在给一维数组赋值时,应注意数组长度应数组长度应 大于字符串长度大于字符串长度。否则会占用其后的存储空间,。否则会占用其后的存储空间,这样有可能破坏其后的本用于其他作用的数据这样有可能破坏其后的本用于其他作用的数据第二节 用指针表示字符串例:例:char *p=“from one”;char *p=“from one”;或或 char *p;char *p;p=“from one”;p=“from one”;上一页下一页暂 停重 放系统返 回休息用用字符数组处理字符串与指针处理字符串的区别字符数组处理字符串与指针处理字符串的区别
3、将字符串赋给指针变量将字符串赋给指针变量,实实际是把字符串首地址赋给际是把字符串首地址赋给指针,意思是用指针指向指针,意思是用指针指向该字符串该字符串 占用的占用的存储空间存储空间 存储空存储空 间位置间位置当当指针指向字符串时指针指向字符串时,可以像使用数组一样使用指针可以像使用数组一样使用指针 例例 p0,p1,p2,p3p0,p1,p2,p3等等 指针指针 字符数组字符数组 一个一个 依数组大小而改变依数组大小而改变 变化的变化的(可指向可指向 固定的固定的(只能表示只能表示不同的字符串不同的字符串)定义的那个位置定义的那个位置)若有:若有:char *cp;与与 char str20;
4、则:则:str是地址常量;而是地址常量;而cp是地址变量,但两者都是地址变量,但两者都存放字符存放字符串首地址串首地址 char str20;str=“I love China!”;()char str20=“I love China!”;()char *cp;cp=“I love China!”;()char*cp=“I love China”;()str是地址是地址常量常量;cp是地址变量是地址变量cp接受键入字符串时接受键入字符串时,必须必须先开辟存储空间先开辟存储空间例例 char str10;scanf(“%s”,str);()而而 char *cp;scanf(“%s”,cp);(
5、)改为改为:char *cp,str10;cp=str;scanf(“%s”,cp);()char str=“Hello!”;()char str=“Hello!”;()char str=H,e,l,l,o,!;()char *cp=“Hello”;()int a=1,2,3,4,5;()int *p=1,2,3,4,5;()若:若:char str10,*cp;int a10,*p;则:则:str=“Hello”;()cp=“Hello!”;()a=1,2,3,4,5;()p=1,2,3,4,5;()判判断断右右面面的的赋赋值值是是否否正正确确 例例 main()char string=“I
6、 love China!”;printf(“%sn”,string);printf(“%sn”,string+7);IloveChistring0string1string2string3string4string5string6string7string8string9stringstring10string11string12string13n!a0String+7运行结果:运行结果:I love China!China!第三节第三节 字符串的输入与输出字符串的输入与输出1.1.可以采取逐一字符输入的方法,用循环的方式完成可以采取逐一字符输入的方法,用循环的方式完成 char ab10,i
7、;for(i=0;i=9;i+)scanf(“%c”,&abi);2.2.也可以采用给整个数组赋值的方式完成也可以采用给整个数组赋值的方式完成char ab10,i;scanf(“%s”,ab);char ab10,i;scanf(“%s”,&ab);3.3.两种方式的区别两种方式的区别假设输入的都是假设输入的都是“Computer”Combuter Combuter0第一种第一种第二种第二种说明:说明:由于数组名本身就代表着地址,因由于数组名本身就代表着地址,因此在输入时没有必要再用地址符此在输入时没有必要再用地址符 “&”&”。上上一一页页下下一一页页暂暂 停停重重 放放系统系统返返 回回
8、休息休息字符串的输入字符串的输入char ab10;gets(ab);1.1.可以采取逐一字符输出的方法,用循环的方式完成可以采取逐一字符输出的方法,用循环的方式完成 char ab10=“abcde0fgh”;for(i=0;i=9;i+)printf(“%c”,abi);2.2.也可以将整个数组输出。也可以将整个数组输出。printf(“%s”,ab);或或 puts(ab);说明:说明:采用将整个数组输出时,采用将整个数组输出时,系统碰到系统碰到“0”0”后结束输出后结束输出 练一练练一练上上一一页页下下一一页页暂暂 停停重重 放放系统系统返返 回回休息休息abcde0fgh0a0a1a
9、2a3a4a5a6a7a8a9输出结果是输出结果是:abcde fgh输出结果是:输出结果是:abcde字符串的输出字符串的输出一、实现方法一、实现方法用二维字符数组用二维字符数组二、用二维字符数组实现的方法二、用二维字符数组实现的方法上上一一页页下下一一页页暂暂 停停重重 放放系统系统返返 回回休息休息第四节第四节 字符串数组字符串数组用指针数组用指针数组二维字符的每一行都可以表示一个字符串二维字符的每一行都可以表示一个字符串例:例:char a35=“A”,“BB”,“CCC”char a35=“A”,“BB”,“CCC”;A0BB0CCC0a0a0a1a1a2a2a0a0a00a00fo
10、r(i=0;i3;i+)for(i=0;i3;i+)scanfscanf(“%s”,(“%s”,ai);ai);三、用指针数组实现三、用指针数组实现上上一一页页下下一一页页暂暂 停停重重 放放系统系统返返 回回休息休息用指针数组的每一个指针分别指向一行用指针数组的每一个指针分别指向一行例:例:char *a3=“A”,“BB”,char *a3=“A”,“BB”,“CCC”“CCC”;A0BB0CCC0a0a0a1a1a2a2a0a0for(i=0;i3;i+)for(i=0;istr2 str1str2 ,则,则返回返回 正数正数 若若str1=str2 str1=str2 ,则,则返回返回
11、 零零 若若str1str2 str1str2 ,则,则返回返回 负数负数5.5.strchrstrchr(“(“字符串字符串”,字符字符)在在字符串中查找字符,返回字符第一次出现在字符串中的地址(指针)字符串中查找字符,返回字符第一次出现在字符串中的地址(指针)例:例:strchrstrchr(“(“abcdkksdkabcdkksdk”,k)”,k)或或 strchr(“abcdkksdk”,107)6.6.strstrstrstr(“(“字符串字符串1”1”,“字符串字符串2”2”)在在字符串字符串1 1中查找字符串中查找字符串2 2第一次出现的地址(指针)第一次出现的地址(指针)例:例
12、:strstrstrstr(“(“abcdkksdk”,”cd”)abcdkksdk”,”cd”)第六节第六节 程序举例程序举例编写函数编写函数,求指针求指针s s所指字符串的长度所指字符串的长度上上一一页页下下一一页页暂暂 停停重重 放放系统系统返返 回回休息休息stringlenstringlen(char*s)(char*s)intint n=0;n=0;while(*s!=0)while(*s!=0)n+,s+;n+,s+;return n;return n;第六节第六节 程序举例程序举例上一页下一页暂 停重 放系统返 回休息例:将一个字符串中第一个字母例:将一个字符串中第一个字母K
13、K前后字符串交换位置。前后字符串交换位置。例:例:对串对串“abcdeK12345”abcdeK12345”,交换后为交换后为1234512345KabcdeKabcde#include#include main()char x=abcdeK12345;char*p,*p1=x,*p2;char z80;p=strchr(x,K);strcpy(z,p+1);*p=0;/*p=0;strcat(z,K);strcat(z,x);strcpy(x,z);puts(x);第六节 程序举例上一页下一页暂 停重 放系统返 回休息例:统计一个字符串中某单词出现的次数例:统计一个字符串中某单词出现的次数
14、例:例:对串对串“aabccdddeK12345”aabccdddeK12345”中中dddd出现的次数出现的次数#include“string.h”#include“string.h”#include“#include“stdiostdio.h”.h”main()main()char char x x=“aabccdddeddK12345=“aabccdddeddK12345”;”;char*p=x,*p1;char*p=x,*p1;int int n=0;n=0;while(p1=while(p1=strstrstrstr(p,”(p,”dddd”)”)n+;n+;p=p1+2;p=p1+2;printfprintf(“%d”,n);(“%d”,n);