《二级C语言字符串.ppt》由会员分享,可在线阅读,更多相关《二级C语言字符串.ppt(31页珍藏版)》请在三一办公上搜索。
1、,全国计算机等级考试二级C语言,第13讲 字符串与指针,字符数组和字符串常用的字符串处理函数指针与字符串字符串指针作函数参数字符指针变量与字符数组的区别真题分析,第一节 字符数组和字符串,字符数组的定义形式:char 数组名数组大小如:char c10,ch34;,第一节 字符数组和字符串,字符数组的初始化逐个字符赋值,第一节 字符数组和字符串,字符数组的初始化用字符串常量,注意:字符串的字符个数要小于数组的元素个数。,第一节 字符数组和字符串,字符数组的初始化用字符串常量,注意:字符串的字符个数要小于数组的元素个数。,第一节 字符数组和字符串,二维字符数组的初始化,字符数组的输出举例,#in
2、clude main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)printf(%c,ci);printf(n);,输出结果:I am a boy,字符串及其结束标志无字符串变量,用字符数组处理字符串字符串结束标志:0,第一节 字符数组和字符串,字符串的输入与输出逐个字符输入/输出:%c,第一节 字符数组和字符串,main()char str5;int i;for(i=0;i5;i+)scanf(“%c”,字符串的输入与输出整体输入/输出:%s,第一节 字符数组和字符串,main()char str5;scanf(“%s”,str);printf(
3、“%s”,str);,1.用字符数组名输入字符串时,不加&2.输入串的长度应小于数组大小3.遇空格或回车结束4.系统自动追加0,用字符数组名,输出时遇0结束,%s输出举例,main()char a=h,e,l,0,l,o,0;printf(%s,a);,输出:hel,注:数组中有多个0时,遇第一个结束,%s输入举例,#include main()char a15,b5,c5;scanf(%s%s%s,a,b,c);printf(a=%snb=%snc=%sn,a,b,c);scanf(%s,a);printf(a=%sn,a);,运行情况:输入:How are you?输出:a=How b=a
4、re c=you?输入:How are you?输出:a=How,注:scanf中%s输入时,遇空格或回车结束,第二节 常用的字符串处理函数,字符串输出函数格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束,字符串输入函数格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加0说明:输入串长度应小于字符数组的大小,例#include main()char string80;printf(“Input a string:”);gets(string);puts(string);输入:How are you?输出:How a
5、re you?,第二节 常用的字符串处理函数,字符串连接格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大 连接前,两串均以0结束;连接后,串1后面的0取消,在新串的最后保留0,第二节 常用的字符串处理函数,字符串复制函数格式:strcpy(字符数组1,字符串2)功能:将字符串2,复制到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大 拷贝时0一同复制 不能使用赋值语句为一个字符数组赋值,例 char str120,str220;str1=“Hello!”;()str2=str1;(),例
6、char str120,str220;strcpy(str1,“Hello!”);strcpy(str,str2);,第二节 常用的字符串处理函数,字符串比较函数格 式:strcmp(字符串1,字符串2)功 能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到第一个不相同的字符或0为止。返 值:返回一个整数1.若字符串1 字符串2,返回13.若字符串1=字符串2,返回零说 明:字符串比较不能用“=”,必须用strcmp,第二节 常用的字符串处理函数,求字符串长度函数格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括0在内,对于以下字符
7、串,strlen(s)的值为:(1)char s10=A,0,B,C,0,D;(2)char s=“tv0willn”;(3)char s=“x69082n”;,答案:1 3 1,字符串处理函数举例1,#include#include main()char str1=”Hello!,str2=”How are you?”,str20;int len1,len2,len3;len1=strlen(str1);len2=strlen(str2);if(strcmp(str1,str2)0)strcpy(str,str1);strcat(str,str2);else if(strcmp(str1,s
8、tr2)0)strcpy(str,str2);strcat(str,str1);else strcpy(str,str1);len3=strlen(str);puts(str);printf(”Len1=%d,Len2=%d,Len3=%dn”,len1,len2,len3);,How are you?Hello!Len1=6,Len2=12,Len3=18,字符串处理函数举例2:找三个字符串中的最大者,H o w 0,H e l l o 0,H i g h 0,str0,str1,str2,#include#include main()char string20,str320;int i;f
9、or(i=0;i0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);printf(nThe largest string is:n%sn,string);,The largeset string is:How,第三节 指针与字符串,字符串表示形式用字符数组实现,main()char string=“I love China!”;printf(“%sn”,string);printf(“%sn”,string+7);,运行结果:I love China!China!,
10、第三节 指针与字符串,字符串表示形式用字符指针实现,main()char*string=“I love China!”;printf(“%sn”,string);string+=7;while(*string)putchar(string0);string+;,字符指针初始化:把字符串首地址赋给string char*string;string=“I love China!”;,*string!=0,运行结果:I love China!China!,第四节 字符串指针作函数参数,用字符数组作函数参数,void copy_string(char from,char to)int i=0;whil
11、e(fromi!=0)toi=fromi;i+;toi=0;main()char a=I am a teacher.;char b=You are a student.;printf(string_a=%sn string_b=%sn,a,b);copy_string(a,b);printf(nstring_a=%snstring_b=%sn,a,b);,第四节 字符串指针作函数参数,用字符串指针变量作函数参数,void copy_string(char*from,char*to)for(;*from!=0;from+,to+)*to=*from;*to=0;main()char a=I am
12、 a teacher.;char b=You are a student.;printf(string_a=%snstring_b=%sn,a,b);copy_string(a,b);printf(nstring_a=%snstring_b=%sn,a,b);,第五节 字符指针变量与字符数组区别,char*cp;与 char str20;1.str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址。2.str是地址常量;cp是地址变量。如:char str20;str=“I love China!”;()char*cp;cp=“I love China!”;()3.cp接受键入字符串
13、时,必须先开辟存储空间,真题分析,2008年4月(25)设有如下程序段char s20=Beijing,*p;p=s;则执行p=s;语句后,以下叙述正确的是()。A)可以用*p 表示s0B)s 数组中元素的个数和p 所指字符串长度相等C)s 和p 都是指针变量D)数组s 中的内容和指针变量p 中的内容相同,答案:A,真题分析,2008年4月(27)有定义语句:char s10;,若要从终端给s 输入5 个字符,错误的输入语句是()。A)gets(,答案:D,真题分析,2008年4月(33)有以下程序#include#include string.hvoid fun(char*s,int n)c
14、har*t;int i,j;for(i=0;istrlen(sj)t=si;si=sj;sj=t;main()char*ss=bcc,bbcc,xy,aaaacc,aabcc;fun(ss,5);printf(%s,%sn,ss0,ss4);程序的运行结果是()。A)xy,aaaacc B)aaaacc,xyC)bcc,aabcc D)aabcc,bcc,答案:A,实质是对指针数组中各元素所指向的字符串按由小到大的顺序进行排序,真题分析,2008年4月(35)有以下程序#include void fun(char*a,char*b)while(*a=*)a+;while(*b=*a)b+;a+
15、;main()char*s=*a*b*,t80;fun(s,t);puts(t);程序的运行结果是()。A)*a*b B)a*bC)a*b*D)ab,答案:C,将指针变量a所指的字符串从第1个非”*”以后的内容复制到指针变量b所指向的存储单元中.,真题分析,2008年9月(24)若有定义语句:char s10=123456700;,则strlen(s)的值是()。A)7 B)8 C)9 D)10,答案:A,知识点分析,题型:上机、笔试都有,出现几率很高。数量:笔试部分一般会出1-2个选择题和1-2个填空题。重点掌握:1.字符串的初始化、串的存放2.常见的字符串处理函数3.字符指针变量做函数的参数,