资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,10,章 字符串,主讲:侯清兰,10.1,用一维字符数组存放字符串,给一维数组赋字符串,1.,char str10=s,t,r,i,n,g,!,0;,2.char str10=“string!”;,或者,char str10=“string!”;,一个字符数组用来作为字符串使用,那么在定义该字符,数组时,数组的大小就应该比将要实际存放的字符串多一,个元素。,例:若给出以下定义:,char x=”,abcdefg,”;,char y=,a,b,c,d,e,f,g,;,则正确的叙述为,()。,A,)数组,x,和数组,y,等价,B),数组,x,和数组,y,的长度相同,C),数组,x,的长度大于数组,y,的长度,D),数组,x,的长度小于数组,y,的长度,C,C,执行过程中为一维字符数组赋字符串,1.char mark10;,mark=“string!”;,错误,数组名是一个地址常量,2.,给数组元素逐个赋字符值,最后人为加入串结束标志,char mark10;,mark0=s;mark1=t;.,或者:,for(i,=0;i9;i+),scanf(“%c”,&marki,);,10.2,使指针指向一个字符串,通过赋初值的方式,char*,ps,=“form one”;,通过赋值运算,char*,ps,;,ps,=“form one”;,char,str,=“form two”;,ps,=,str,;,例:,char*p=“string”;,注意:,printf(“%c,”,*p+);,输出的结果是,s,printf(“%c,”,*+p);,输出的结果是,t,10.3,字符串的输入和输出,输入和输出字符串的必要条件,对字符串进行输出时,输出项可以是字符串,常量、字符数组名、指向字符串的字符指针变,量。,对字符串进行输入时,输入项可以是字符数,组名、指向字符串的字符指针变量。,用格式说明符,%s,进行整串输入和输出,(,1,)在,scanf,函数中使用,%s,进行字符串的输入,scanf(“%s”,str,);,str,可以是字符数组名、字符数组元素的地址或字符指,针变量。,说明:用,%s,格式符输入字符串,空格和回车都作为输,入数据的分隔符而不能被输入。,以下程序运行时,输入为,AhaMA,Aha,,则分析以下程序的运行结果是:()。,main(),char s80,c=a;,int,i=0;,scanf(%s,s,);,while(si,!=0),if(si,=c),si,=si-32;,else,if(si,=c-32),si,=si+32;,i+;,printf(%s,s,);,ahAMa,当输入项是数组元素的地址时,输入的字符将从这一元素开始依次存放在该数组中。,当输入项为字符指针变量时,该指针变量必须已指向确定的有足够空间的连续存储单元。,(,2,)在,printf,函数中使用,%s,进行输出。,printf(“%s”,str,);,str,是地址值。从这一地址开始,一次输出存储单元中的字符,直到遇到第一个,0,为止。输出结束后不自动换行。,gets(str,);,输入一个字符串。回车作为输入数据的分隔,puts(str,);,输出一个字符串。结束后自动换行。,puts,()函数和,gets,()函数只能输入、输出一个字符串,例,1,:有定义语句:,char s10;,,若要从终端给,s,输入,5,个字符,错误的输入语句是()。(,08,年,4,月二级,C,真题),A,),gets(B,),scanf(%s,s+1);,C,),gets(s,);D,),scanf(%s,s1);,例,2,:执行下列程序时,输入,123456789,,输出结果是()。,main(),char s100;int,c,i,;,scanf(%c,scanf(%s,s,);,printf(%c,%d,%sn,c,i,s,);,A,),123,,,456,,,789 B)1,,,456,,,789,C)1,,,23,,,456,,,789 D)1,,,23,,,456,D,D,例,3.,有以下程序,#include,main(),char s=“012xy”;int,i,n,=0;,for(i,=0;si!=0;i+),if(si,=,a&si,=0i+=2),s=10*s+chi-0;,printf(%dn,s);,A,),12ba56 B)6521 C)6 D)62,D,10.5,用于字符串处理的函数,strlen,(),函数:求字符串的长度,不包括,0,例如,若有以下程序段,结果是(),char,str,=”abn012”;,printf(“%d”,strlen(str,);,A,),3 B,),4 C,),6 D,),12,C,strcpy(s1,s2),函数:字符串复制函数,函数用来把,s2,所指字符串的内容(包括,0,)复制,到,s1,所指存储空间中,函数返回,s1,的值,即目的串,的首地址。,例:,char str1=”china”,str2=”,eof,”;,strcpy(str1,str2);,puts(str1);,printf(“%c”,str14);,eof,c,例:有下面的程序段:,char str10,ch=”China”;,str,=,ch;printf(“%s”,str,);,则运行时()。,A,)将输出,China B),将输出,Ch C),将输出,Chi D),编译出错,例下面程序运行后的输出结果是()。,main(),char arr24;,strcpy(arr0,you);,strcpy(arr1,me);,arr03=,printf(%sn,arr0);,A,),you&me,B)you C)me D)err,D,B,strcat,(,s1,s2,):字符串连接函数,将,s2,所指字符串的内容连接到,s1,所指的字符串后,面,并自动覆盖,s1,串末尾的,0,,函数返回,s1,所指的,地址值。,char str1=”china”,str2=”eof”,str3=”chi0na”;,strcat(str1,str2);,strcat(str3,str2);,puts(str1);,puts(str3);,strcmp(s1,s2):,字符串比较函数,若串,s1,串,s2,函数值大于,0,;若串,s1=,串,s2,函数值等,于,0,;若串,s10),printf(“s1,大于,s2”),;,else if(strcmp(s1,s2)=0),printf(“s1,等于,s2”),;,else,printf(“s1,小于,s2”),;,例:当运行一下程序时,从键盘输入:,BOOK,CUT,GAME,PAGE,则下面程序的运行结果是,_,。,#include,#include,main(),int,i;,char str10,temp10=CONTROL;,for(i,=0;i4;i+),gets(str,);,if(strcmp(temp,str,)0),strcpy(temp,str,);,puts(temp,);,PAGE,例:下面程序的运行结果是,_,。,#include,main(),char s=ABCCDA;,int,k;char c;,for(k,=1;(c=,sk,)!=0;k+),switch(c,),case,A:putchar(%);continue,;,caseB:+k;break,;,default:putchar,(*);,case,C:putchar(continue,;,putchar,(#);,#&*#%,字符指针做函数参数,例,1.,下列程序的运行结果是:,void,abc(char,*,str,),int,a,b,;,for(a,=b=0;stra!=,0,;a+),if(stra,!=,c,),strb,+=,stra,;,strb,=,0,;,main(),char,str,=,“,abcdef,”,;,abc(str,);,printf(,“,str,=%,s,”,str,);,A.str,=,abdef,B.str,=,abcdef,C.str,=a,D.str,=,ab,例:下面程序的运行结果是。,void,delch(char,*s),int,i,j,;char*a;a=s;,for(i,=0,j=0;ai!=,0,;i+),if(ai,=,0,&ai=,9,),sj,=,si;j,+;,sj,=,0,;,main(),char*item=,“,a34bc,”,;,delch(item,);,printf(,“,n%s,”,item,);,A.abc,B.34 C.a34 D.a34bc,例:以下程序的输出结果是:,void,f(char,*s,char*t),char k;,k=*s;*s=*t;*t=k;,s+;t,-;,if(*s),f(s,t,);,main(),char str10=,“,abcdefg,”,*p;,p=str+strlen(str)/2+1;,f(p,p-2);,printf(,“,%sn,”,str,);,字符指针数组,定义:类型名*数组名,数组长度,;,char*s3=,“,abc,”,”,de,”,”,fggh,”,;,例,1.,输出结果是:,main(),char*alpha6=,“,ABCDEFGH,”,”,IJKL,”,”,MNOP,”,”,QRST,”,”,UVWX,”,;,char*,p;int,i;p=alpha;,for(i,=0;i4;i+),printf(,“,%s,”,pi,;),A.ABCDEFGHIFKL B.ABCD,C.ABCDEFGHIJKLMNOPQRST D.AEIM,字符串数组,字符串数组就是数组中的每一个元素又都是一个存放字,符串的一维数组。,1.,字符串数组在定义的同时赋初值。,char str35=“A”,”BB”,”CCC”;,或者,char str5=“A”,”BB”,”CCC”;,2.,定义字符型指针数组并通过赋初值来构成一个类似的字,符串数组。,char*p3=“,a”,”bb”,”ccc,”;,例题:,P153 10.7,,,10.8,传递给,main,函数的参数,形式:,main(int,argc,char,*,argv,),argc,中存入命令行中字符串的个数,,argv,数组中每个元素都是指针,分别指向字符串。,例如:输入,myc,OK!GOOD,此时,,argc,的值为,3,argv0,指向,myc,argv1,指向,OK!,,,argv2,指向,GOOD.,例,1,:执行以下程序,输出结果:,main(int,argc,char,*,argv,),int,i;,printf(“%dn”,argc,);,for(i,=1;i,argc;i,+),printf(“%s”,argvi,);,printf(“n,”);,OK!GOOD,例:,main(int,argc,char*,argv,),int,i=1,n=0;,while(i,0),printf(“%s”,argvargc,);,printf(“n,”);,IJKLEFGHABCD,
展开阅读全文