第10章 字符串 (2).ppt
《第10章 字符串 (2).ppt》由会员分享,可在线阅读,更多相关《第10章 字符串 (2).ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十章第十章 字符串字符串计算机二级辅导办公室计算机二级辅导办公室10.1 用一维字符数组存放字符串用一维字符数组存放字符串字符串的相关概念字符串的相关概念lC语言对字符串的处理方式语言对字符串的处理方式l字符串是借助于一维字符数组存放的,但两者并不等价字符串是借助于一维字符数组存放的,但两者并不等价l字符串总是以字符串总是以0作为串结束标志作为串结束标志l0占用存储空间,但所说的串长不包括占用存储空间,但所说的串长不包括0l字符串常量的相关概念字符串常量的相关概念l字符串常量用字符串常量用“”把有效字符包含,不必加把有效字符包含,不必加0l字符串常量实际是以字符串常量实际是以0结尾的无名字但
2、有地址的一维结尾的无名字但有地址的一维数组数组l字符串常量可以赋值给字符指针变量,但不能赋给一个已字符串常量可以赋值给字符指针变量,但不能赋给一个已经定义了的一维字符数组经定义了的一维字符数组例如例如:char*sp,s10;则:则:s=“hello!”;sp=“hello!”;l字符数组和字符串的区别字符数组和字符串的区别l字符数组的每一个元素都可以是任意字符字符数组的每一个元素都可以是任意字符l字符串是由字符数组中第一个字符串是由字符数组中第一个0和前面的字符所组成和前面的字符所组成的的1.赋初值方式同一般数组赋初值方式同一般数组 例题如下例题如下:1.char str10=s,t,r,i
3、,n,g,!,0 等价于:等价于:2.char str=s,t,r,i,n,g,!,0;等价于:等价于:分析:分析:char str=s,t,r,i,n,g,!;1.在赋初值时直接赋字符串常量在赋初值时直接赋字符串常量 例题如下例题如下:1.char str 10=“string!”;等价于等价于 char str 10=“string!”;2.char str=“string!”;不等价于不等价于 char str7=“string!”;q通过赋初值方式给一维字符数组赋字符串通过赋初值方式给一维字符数组赋字符串string!0 0 0string!0l不可以用赋值语句给字符数组整体赋一串字符
4、不可以用赋值语句给字符数组整体赋一串字符 1.char mark10;mark=“computer”;2.char m10=“good!”;char n10;n=m;l给数组元素逐个赋字符值给数组元素逐个赋字符值,最后人为加入串结束标志最后人为加入串结束标志 1.char m10;m0=s;m1=t;m2=r;m9=0;2.char mark10;int i;for(i=0;i9;i+)scanf(“%c”,&marki);marki=0;q在在C程序执行过程中给一维字符数组赋字符串程序执行过程中给一维字符数组赋字符串 10.2 使指针指向一个字符串使指针指向一个字符串q通过赋初值的方式使指针
5、指向一个字符串通过赋初值的方式使指针指向一个字符串可以在定义字符指针变量的同时,将存放字符串的存储单元起始可以在定义字符指针变量的同时,将存放字符串的存储单元起始地址赋给指针变量地址赋给指针变量例如:例如:char*ps=“string”;这里将把字符串常量的无名存储区的首地址赋给了指针这里将把字符串常量的无名存储区的首地址赋给了指针psq通过赋值运算使指针指向一个字符串通过赋值运算使指针指向一个字符串1.charstr=“formtwo”,*ps2;ps2=str;等价于等价于:charstr=“formtwo”,*ps2;ps2=&str0;2.char*ps;ps=“string”;q用
6、字符数组作为字符串和用指针指向的一个字符串之间的区别用字符数组作为字符串和用指针指向的一个字符串之间的区别charmark=“Aprogram”;和和char*pmark=“Aprogram”;区别是区别是:内容相同,存储结构不同,占的存储空间不同内容相同,存储结构不同,占的存储空间不同;10.3 字符串的输入和输出字符串的输入和输出q逐个字符输入和输出:逐个字符输入和输出:%c 例例:main()charstr5;inti;for(i=0;i4;i+)scanf(“%c”,&stri);stri=0;for(i=0;i5;i+)printf(“%c”,stri);q输入和输出字符串时的必要条
7、件输入和输出字符串时的必要条件(串整体串整体%s)字符串进行字符串进行输出输出时,输出项是字符串或字符数组时,输出项是字符串或字符数组名或是已指向字符串的字符指针变量名或是已指向字符串的字符指针变量字符串进行字符串进行输入输入时,输入项是字符数组名或指针时,输入项是字符数组名或指针q用格式说明符用格式说明符%s进行进行整输入和输出整输入和输出:用用%s输入和输出的形式为输入和输出的形式为:scanf(“%s”,str_adr);其中其中str_adr是地址值是地址值printf(“%s”,str_adr);其中其中str_adr是地址值是地址值注意注意:1.用用%s s输入字符串时输入字符串时
8、,空格和回车符都作为输入数空格和回车符都作为输入数 据据的的2.分隔符而不分隔符而不 能被读入!能被读入!2.2.输入字符串长度大于数组字符个数输入字符串长度大于数组字符个数,系统不报错系统不报错3 3.输入项为字符指针时输入项为字符指针时,该指针已指向确定的有足够空该指针已指向确定的有足够空间的连续存储单元间的连续存储单元4.4.当输入项是数组元素的地址时当输入项是数组元素的地址时,输入数据将从这一元素输入数据将从这一元素开始存放开始存放.lgets函数的调用形式为:函数的调用形式为:gets(str_adr);其中其中str_adr是存放输入字符串的起始地是存放输入字符串的起始地址,可以是
9、字符数组名、字符指针或字符数址,可以是字符数组名、字符指针或字符数组元素的地址组元素的地址例如:例如:charstr20;gets(str);注意:此种方式输入的字符串中可以有空格注意:此种方式输入的字符串中可以有空格lputs函数的调用形式为:函数的调用形式为:puts(str_adr);其中其中str_adr是存待输出字符串的起始地址是存待输出字符串的起始地址q调用调用gets、puts函数在终端输入或输出一行字符串函数在终端输入或输出一行字符串#includemain()chara15,b5,c5;scanf(%s%s%s,a,b,c);printf(a=%snb=%snc=%sn,a,
10、b,c);scanf(%s,a);printf(a=%sn,a);运行情况:输入:Howareyou?输出:a=Howb=arec=you?输入:Howareyou?输出:a=How若准备将字符串若准备将字符串“Thisisastring.”记录下来记录下来,错误的输入语句错误的输入语句为:为:(A)scanf(“%20s”,s);(B)for(k=0;k17;k+)sk=getchar();(C)while(c=getchar()!=n)sk+=c;例题分析例题分析例题例题 将字符串将字符串a复制到字符串复制到字符串bmain()char a=“I am a boy.”,b20;int i;
11、for(i=0;*(a+i)!=0;i+)*(b+i)=*(a+i);*(b+i)=0;printf(“string a is:%sn”,a);printf(“string b is:”);for(i=0;bi!=0;i+)printf(“%c”,bi);printf(“n”);main()char a=“I am a boy.”,b20;char*p1,*p2;int i;P1=a;p2=b;for(;*p1!=0;p1+,p2+)*p2=*p1;*p2=0;printf(“string a is:%sn”,a);printf(“string b is:”);for(i=0;bi!=0;i+
12、)printf(“%c”,bi);printf(“n”);q字符串与字符数组关系小结字符串与字符数组关系小结字符串用一维字符数组存放字符串用一维字符数组存放字符数组具有一维数组的所有特点字符数组具有一维数组的所有特点数组名是指向数组首地址的地址常量数组名是指向数组首地址的地址常量数组元素的引用方法可用指针法和下标法数组元素的引用方法可用指针法和下标法数组名作函数参数是地址传递等数组名作函数参数是地址传递等区别区别存储格式:字符串结束标志存储格式:字符串结束标志赋值方式与初始化赋值方式与初始化输入输出方式:输入输出方式:%s%ccharstr=“Hello!”;()charstr=“Hello!
13、”;()charstr=H,e,l,l,o,!;()char*cp=“Hello”;()inta=1,2,3,4,5;()int*p=1,2,3,4,5;()charstr10,*cp;inta10,*p;str=“Hello”;()cp=“Hello!”;()a=1,2,3,4,5;()p=1,2,3,4,5;()scanf(“%s”,str);()printf(“%s”,str);()gets(str);()puts(str);()q字符串数组的定义与实现字符串数组的定义与实现 字符串数组就是数组中的每个元素又都是一个存字符串数组就是数组中的每个元素又都是一个存放字符串的数组。用二维字符数
14、组就可以实现。放字符串的数组。用二维字符数组就可以实现。例例如如:char name1080;其其中中第第一一维维下下标标决定字符串的个数,第二维决定字符串最大长度决定字符串的个数,第二维决定字符串最大长度 10.4 字符串数组字符串数组q字符串数组可以在定义的同时赋初值字符串数组可以在定义的同时赋初值 例如:例如:char ca34=“A”,“BB”,“CCC”;ca0A0ca1BB0ca2CCC0q可以定义字符型指针数组并通过赋初值来构成可以定义字符型指针数组并通过赋初值来构成一类似的字符串数组一类似的字符串数组例如:例如:char*pa3=“a”,“bb”,“ccc”;pa0pa1pa2
15、a0bb0ccc0例题:字符指针数组应用举例例题:字符指针数组应用举例将若干字符串按字母顺序(由小到大)输出将若干字符串按字母顺序(由小到大)输出main()void sort();void print();static char*name=“Followme”,”BASIC”,“Great Wall”,“FORTRAN”,“Computer design”;int n=5;sort(name,n);print(name,n);voidsort(char*name,intn;)char*temp;inti,j,k;for(i=0;in-1;i+)k=i;for(j=i+1;j0)k=j;if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 字符串 2 10
限制150内