第10章字符串.ppt
第10章 字符串主讲:侯清兰10.1 用一维字符数组存放字符串o给一维数组赋字符串 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的长度 CoC执行过程中为一维字符数组赋字符串 1.char mark10;mark=“string!”;错误,数组名是一个地址常量 2.给数组元素逐个赋字符值,最后人为加入串结束标志 char mark10;mark0=s;mark1=t;.或者:for(i=0;i9;i+)scanf(“%c”,&marki);10.2 使指针指向一个字符串o通过赋初值的方式 char*ps=“form one”;o通过赋值运算 char*ps;ps=“form one”;char str=“form two”;ps=str;例:char*p=“string”;注意:printf(“%c”,*p+);输出的结果是s printf(“%c”,*+p);输出的结果是t10.3 字符串的输入和输出o输入和输出字符串的必要条件 对字符串进行输出时,输出项可以是字符串常量、字符数组名、指向字符串的字符指针变量。对字符串进行输入时,输入项可以是字符数组名、指向字符串的字符指针变量。o用格式说明符%s进行整串输入和输出 (1)在scanf函数中使用%s进行字符串的输入 scanf(“%s”,str);str可以是字符数组名、字符数组元素的地址或字符指针变量。说明:用%s格式符输入字符串,空格和回车都作为输入数据的分隔符而不能被输入。o以下程序运行时,输入为AhaMA Aha,则分析以下程序的运行结果是:()。main()char s80,c=a;int i=0;scanf(%s,s);while(si!=0)if(si=c)si=si32;else if(si=c32)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(&s0);B)scanf(%s,s+1);C)gets(s);D)scanf(%s,s1);例2:执行下列程序时,输入123456789,输出结果是()。main()char s100;int c,i;scanf(%c,&c);scanf(%d,&i);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 DDo例3.有以下程序#include main()char s=“012xy”;int i,n=0;for(i=0;si!=0;i+)if(si=a&si=0&chi串s2,函数值大于0;若串s1=串s2,函数值等于0;若串s10)printf(“s1大于s2”);else if(strcmp(s1,s2)=0)printf(“s1等于s2”);else printf(“s1小于s2”);o例:当运行一下程序时,从键盘输入:BOOKo CUT GAME PAGE则下面程序的运行结果是_。#include#includemain()int i;char str10,temp10=CONTROL;for(i=0;i4;i+)gets(str);if(strcmp(temp,str)0)strcpy(temp,str);puts(temp);PAGEo例:下面程序的运行结果是_。#includemain()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(#);#&*#%字符指针做函数参数o例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=abo例:下面程序的运行结果是。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 o例:以下程序的输出结果是: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);字符指针数组o定义:类型名*数组名数组长度;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字符串数组o字符串数组就是数组中的每一个元素又都是一个存放字符串的一维数组。1.字符串数组在定义的同时赋初值。char str35=“A”,”BB”,”CCC”;或者char str5=“A”,”BB”,”CCC”;2.定义字符型指针数组并通过赋初值来构成一个类似的字符串数组。char*p3=“a”,”bb”,”ccc”;例题:P153 10.7,10.8传递给main函数的参数o形式: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;iargc;i+)printf(“%s”,argvi);printf(“n”);OK!GOODo例:main(int argc,char*argv)int i=1,n=0;while(iargc)n=n+strlen(argvi);i+;printf(“%dn”,n);该程序生成的可执行文件为proc.exe。若运行时输入命令行:proc 123 45 67 ,则程序输出结果。A.3 B.5 C.7 D.11例2:输入PROG ABCD EFGH IJKL,则输出结果是:main(int argc,char*argv)while(argc0)printf(“%s”,argvargc);printf(“n”);IJKLEFGHABCD