第4讲字符数组_第1页
第4讲字符数组_第2页
第4讲字符数组_第3页
第4讲字符数组_第4页
第4讲字符数组_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第14讲字符数组 1. 字符串及其结束标志lC语言没有字符串变量,用字符数组处理字符串。l字符串结束标志:0 例如,若在程序中用到了 字符串 “hello”,该字符串共有5个字符,但其在内存要占用6个字节,而字符串长度为5。 h e l l o 0104 101 108 108 111 0内存存放字符ASCII码2. 字符串常量在内存中也占用一串连续的存储空间。3.3.将将字符串字符串存于存于字符数组字符数组的方法的方法(1) (1) 通过赋值运算将字符逐个赋给各元素后通过赋值运算将字符逐个赋给各元素后, ,人为加入人为加入00。如:如:char c6;char c6;或:或:c0=h;c1=

2、e;c2=l;c3=l;c0=h;c1=e;c2=l;c3=l;c4=o;c5=0;c4=o;c5=0;则将字符串则将字符串“hello”hello”存入了字符数组存入了字符数组c c中。中。(2) (2) 通过给字符数组输入字符并在最后加入通过给字符数组输入字符并在最后加入00。如如: char c6;: char c6; int i; int i; for(i=0;i5;i+) for(i=0;i5;i+) scanf(“%c”,&ci); scanf(“%c”,&ci); ci=0; /; /* * 或或c5=0; ; * */ / 直接从键盘上输入直接从键盘上输入:he

3、llo,:hello,也可将字符串也可将字符串“hello”hello”存存入了字符数组入了字符数组c c中。中。(3) (3) 赋初值时通过逐个字符赋给数组中的各元素的方式。赋初值时通过逐个字符赋给数组中的各元素的方式。如如: char c6= : char c6= h,e,l,l,o,0;h,e,l,l,o,0;或或 char c6= h,e,l,l,o; char c6= h,e,l,l,o; / /* * 自动补上自动补上0 0 * */ /(4) (4) 赋初值时直接赋字符串赋初值时直接赋字符串如如: char c6=“hello”;: char c6=“hello”;或或 char

4、 c6=“hello”;char c6=“hello”;或或 char c=“hello”;char c=“hello”; 虽然可将字符串存放于字符数组中处理虽然可将字符串存放于字符数组中处理, ,但字符但字符数组与字符串有区别。字符数组可存放字符串,也可数组与字符串有区别。字符数组可存放字符串,也可存放不是字符串的其它字符。存放不是字符串的其它字符。 字符串都有一个结束标志字符字符串都有一个结束标志字符0 0 ,若要将字,若要将字符串存放于字符数组中,则在定义数组时,数组的大符串存放于字符数组中,则在定义数组时,数组的大小要比所赋的字符串的字符个数至少多小要比所赋的字符串的字符个数至少多1

5、1。1.在scanf函数和printf函数中用格式说明符%c,进行 逐个字符的输入输出。例 用%c输入输出字符串 main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri); 字符数组的输入和输出2. 在scanf函数和printf函数中用格式说明符%s,进行字符串整体的输入输出。 例 用%s输入输出字符串 main() char str5; scanf(“%s”, str); printf(“%s”, str);注意:用字符数组名注意:用字符数组名,不要加不

6、要加&;输入串的长度输入串的长度数组元素个数;数组元素个数;遇空格或回车结束;遇空格或回车结束;自动加自动加0。用字符数组名,输出时遇0结束例 main( ) char a5=H,e,l,l,o; printf(“%s”,a); 例 main( ) char a =“Hello”; printf(“%s”,a); 结果:Hello#-=* h e l l o02314结果:Hello用“%s”输出时,遇0结束注意:注意:字符串字符串与与字符数组字符数组的区别的区别main() char a=h,e,l,0,l,o,0; printf(%s,a);例输出:hel h e l 0 l o

7、0 若数组中有多个若数组中有多个00,在用在用%s%s输出时输出时, ,遇第一个结束!遇第一个结束! 若数组中有多个若数组中有多个00,在用在用%s%s输出时输出时, ,遇第一个结束!遇第一个结束!main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%c,ai); printf(“%sn,a);运行情况:(1)若输入 hel , 正常(2)若输入 hell , 正常(3)若输入 hello , 用%s 输出时,可能会出现问题! (占用了其它存储空间。)注意:输入字符串的长度 字符数组长度 h e l 0 h e l l 0 h e

8、 l l o0 H o w 0 a r e 0 y o u ? 0 #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=are c=you?输入:How are you?输出:a=Howscanf中%s输入时,遇空格或回车结束字符串输入举例3.调用gets和puts函数,从终端进行“字符串行”的输入和输出。 gets和puts函数均包含在头文件stdio.h中。

9、使用这两个函数时,必须使用#include stdio.h 格式:gets(str)功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加0 如:char str20; gets(str); 若输入:A PROGRAM ,则将“A PROGRAM”存入str中。说明:输入串长度应小于字符数组维数这里的str只能是字符数组字符数组getsgets函数函数字符串输出函数字符串输出函数putsputs例 #include void main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 输入:

10、 How are you?输出: How are you ? 格式:puts(str)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束puts(str)puts(str); printf(“%sn”,str); printf(“%sn”,str); 这里str可以是字符数组,也可以是字符串 这些函数均包含在头文件string.h中。使用这些函数时,必须使用#include string.h 1. 字符串拷贝函数字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大,要能够

11、装入字符串2; 字符串2也可以是含有一个元素值为0的字符数组; 拷贝时0一同拷贝; 不能使用赋值语句为一个字符数组赋值。例 char s120,s220; s1=“Hello!”; s2=s1; 例 char s120,s220; char s320=“Hello!”; strcpy(s1,“Hello!”); strcpy(s2,s1);2. 字符串连接函数strcat格式:strcat(字符数组1,字符串2)功能:把字符串2连到字符数组1后面;返值:返回字符数组1的首地址;说明:字符数组1必须足够大; 字符串2也可以是含有一个元素值为0的字符数组; 连接前,两串均以0结束;连接后,串1的0

12、取消, 新串最后加0例 char s120 =“Hello!”; char s2 =“ how are you”;(书错:缺char) strcat (s1,s2); /*或 strcat(s1, how are you);*/ 则s1中得到字符串hello! how are you 。#include #include void main() char destination25; char blank = , c= C+ ; char turbo = Turbo; strcpy(destination, turbo); strcat(destination, blank); strcat(

13、destination, c); printf(%sn, destination);Trbo0123456789u024.Trbo00123456789u24.TrboC+0123456789u024.destinationstrcpy与strcat函数应用举例Turbo C+程序运行结果:程序运行结果:格式:strcmp(字符串1,字符串2)功能:比较两个字符串。比较规则:对两串从左向右逐个字符进行比较(ASCII码), 直到遇到不同字符或0时为止。返值:返回int型整数。 a. 若字符串1 字符串2, 返回正整数; c. 若字符串1= 字符串2, 返回零。说明:两个字符串进行比较时不能用

14、“”、“= =”等关系运算符, 必须用strcmp函数。3. 字符串比较函数字符串比较函数strcmp例如:int x ; x = strcmp(hello!,how are you); 则x的值小于0。 而strcpy(“hello!”, “hello”)的比较结果大于0,因为!比0的ASCII代码值要大。 格式:strlen(字符数组)功能:计算字符串长度。返值:返回字符串实际长度,不包括0在内。例 对于以下字符串,strlen(s)的值为:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:1 3

15、14. 字符串长度函数字符串长度函数strlen(3)char s =“x69072n”; 答案:1 3 3#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, str2)0) strcpy(str,str2); strca

16、t(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=18Ch6_23.c例 strcmp与strlen举例5.大写字母转小写字母函数大写字母转小写字母函数strlwr 格式:strlwr(字符串)功能:将字符串中的所有大写字母都转换为小写字母。 返值:返回一个全部由大写字母组成的新字符串。6. 小写字母转大写字母函数小写字母转大写字母函数str

17、upr 格式:strupr(字符串)功能:将字符串中的所有小写字母都转换为大写字母。 返值:返回一个全部由小写字母组成的新字符串。#include stdio.h#include string.hvoid main() char s1=How Are You!,s220,s320,s420; printf(s1:%sn,s1); strcpy(s2,strlwr(s1); printf(s1:%s s2:%sn,s1,s2); strcpy(s3,strupr(s1); printf(s1:%s s3:%sn,s1,s3); strcpy(s4,strupr(“abcd”); /*在在VC中不

18、能运行,不能更改常量的值!中不能运行,不能更改常量的值!*/ printf(s4:%sn,s4);例6.6 统计输入的一行字符中英文大写字母、英文小写字母、 数字字符及其它字符各有多少个。 #define N 81#include stdio.h#include string.h void main() char strN; int i, n, upper=0, lower=0,digit=0,other=0; gets(str); n = strlen(str); for(i=0;i=A&stri=a&stri=0&stri=9) digit+; else other

19、+; printf(uppercase:%d,lowercase:%d,digit:%d,other:%dn,upper,lower,digit,other); #include main() char string81; int i,num=0,word=0; char c; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word= =0) word=1; num+; printf(There are %d words in the linen,num);例例: :统计一行字符中有多少个单词统计一行字符中有多

20、少个单词输入一字符串给 string i=0 num=0 word=0当(c=stringi)!=0)c=空格真真假假word=0word=1num=num+1i=i+1输出:numword=0表示一个表示一个单词结束单词结束新单词新单词已计数已计数单词单词当前字符=空格是否未出现新单词,使word=0,num不累加前一字符为空格(word=0),新单词出现,word=1,num加1前一字符为非空格(word=1),未出现新单词,num不变否0是11是1未01否0是12否1未12是1未02否0是13是1未03否0是14否1未14否1未14否1未14例 输入:I am a boy. 当前字符是否

21、空格word原值新单词开始否word新值num值Iamaboy. H o w 0 H e l l o 0 H i g h 0 str0str1str2#include #include main() char string20,str320; int i; for(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);例例6.7 有三个字符串,找出其中最大者有三个字符串,找出其中最大者例例 有十个学生的成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论