C语言—字符串_第1页
C语言—字符串_第2页
C语言—字符串_第3页
C语言—字符串_第4页
C语言—字符串_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、C程序设计 教学内容教学内容: : 10.1 10.1 字符数组与字符串字符数组与字符串 10.2 10.2 字符串处理函数字符串处理函数 第第1010章章 字符串字符串C程序设计 1 1字符数组的定义字符数组的定义 一维字符数组一维字符数组,用于存储和处理用于存储和处理1 1个字个字符串,其定义格式与符串,其定义格式与1 1维数值数组一样。维数值数组一样。 二维字符数组二维字符数组,用于同时存储和处理多用于同时存储和处理多个字符串,其定义格式与个字符串,其定义格式与2 2维数值数组一样。维数值数组一样。 char s18, s2312; 10.1 10.1 字符数组与字符串字符数组与字符串C

2、程序设计2.字符串及其结束标志l无字符串变量,用字符数组处理字符串l字符串结束标志:0。 0 代表代表ASCII码为码为0的字符,的字符,表示一个空操作,只起一个标志作用。表示一个空操作,只起一个标志作用。例 “hello”共5个字符,在内存占6个字节 字符串长度5 h e l l o 0h e l l o 0104 101 108 108104 101 108 108 111 0 111 0内存存放字符ASCII码在在 0 前面的字符的个数为该字符串的有效长度。前面的字符的个数为该字符串的有效长度。由于系统在存储字符串常量时,会在串尾自动加上由于系统在存储字符串常量时,会在串尾自动加上1个结

3、束标志,所以无需人为地再加个结束标志,所以无需人为地再加0 。C程序设计3字符数组的初始化字符数组的初始化v字符数组的初始化l逐个字符赋值l用字符串常量v字符数组的引用 例 char ch5=H,e,l,l,o;ch0Hello逐个字符赋值ch1ch2ch3ch4有问题! 例 char ch5=H,e,l,l,o,!;ch0Hello逐个字符赋值ch1ch2ch3ch4 例 char ch5=B,o,y;ch0Boy00逐个字符赋值ch1ch2ch3ch4 例 char ch5=“Boy”;ch0Boy00用字符串常量ch1ch2ch3ch4 例 char ch6=“Hello”; char

4、ch6=“Hello”; char ch=“Hello”;用字符串常量ch0Helloch1ch2ch3ch40ch5C程序设计 说明:说明: 1 1). . 结束标志在字符数组中也要结束标志在字符数组中也要占用一个元素占用一个元素的存储空间,因此在说明字符数组长度时,至少为的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加字符串所需长度加1 1。 字符数组并不要求它的最后一定要加字符数组并不要求它的最后一定要加00。是否加是否加00,完全视需要而定。,完全视需要而定。 C程序设计2).初始化时,赋值个数字符数组长度,则其他元素自动定为0例 char s8=a,f,t,e,rafte

5、r0003).判断以下哪几种赋值方式等价?(1) char a6=c,h,i,n,a; (2) char a6=c,h,i,n,a,0;(3) char a =china;(4) char a =china“;(5) char a6=china0;(6) char a =c,h,i,n,a;只定义了有只定义了有5个元素的字符个元素的字符数组,由于所赋值末尾没数组,由于所赋值末尾没有串结束标志,不能当字有串结束标志,不能当字符串使用!符串使用!C程序设计 4.字符数组的输入输出字符数组的输入输出 (1 1)用用“%c”格式符逐个的输入或输出字符数组的字符。格式符逐个的输入或输出字符数组的字符。

6、for(i=0;i11;i+) scanf( %c, &ai ); for(i=0;i11;i+) printf( %c,ai ); 输出数组单个元素的数值,要指出元素的下标。输出数组单个元素的数值,要指出元素的下标。 (2 2)用)用“%s”格式符将整个字符串一次输入或输出。格式符将整个字符串一次输入或输出。 printf(“%s”,c); 中中c是字符数组名,不是数组元素名。是字符数组名,不是数组元素名。 scanf( %s, c ); 输入或输出时输入或输出时, ,并不输入或输出结束符并不输入或输出结束符00。%s整串输入整串输入和输出的格式说和输出的格式说明符明符%c单个字符单个字符输

7、入和输出,结输入和输出,结合循环使用。合循环使用。C程序设计 (3)字符数组的输出字符数组的输出 printf函数函数%s%s格式输出字符串格式输出字符串时,当遇到时,当遇到00时就停止输时就停止输出,系统不输出字符的定界符。出,系统不输出字符的定界符。 如果字符数组的长度大于字符串的实际长度,也只输出到如果字符数组的长度大于字符串的实际长度,也只输出到0为止。为止。 如果字符数组中有多个如果字符数组中有多个0 ,则遇到第一个,则遇到第一个0时停止输出。时停止输出。 puts( )puts( )函数函数 如:如: static char str = “ChinanBeijing”; puts(

8、str); 输出输出: printf(“%sn”,str); China Beijing 输出字符串输出字符串puts()函数函数(1 1)调用方式:)调用方式:puts( (字符数组字符数组) )(2 2)函数功能:把字符数组中所存放的字符串,输出到标)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用准输出设备中去,并用nn取代字符串的结束标志取代字符串的结束标志00。用。用puts()函数输出字符串时,不要求另加换行符。函数输出字符串时,不要求另加换行符。(3 3)使用说明)使用说明1)1)字符串中允许包含转义字符,输出时产生一个控制操作。字符串中允许包含转义字符,输出时

9、产生一个控制操作。2)2)该函数一次只能输出一个字符串,而该函数一次只能输出一个字符串,而printf()函数也能用来函数也能用来输出字符串,且一次能输出多个。输出字符串,且一次能输出多个。C程序设计实例:main() char a=c,h,i,n,a; int i; puts(a); printf(-n); printf(%sn,a); for(i=0;i5;i+) printf(%c,ai); printf(n);不包含串结束标志不包含串结束标志慎重使用慎重使用C程序设计 (4 4)字符数组的输入字符数组的输入 scanf( “%s”,c ); ; c为字符数组名,输入一个字为字符数组名,

10、输入一个字符串,以回车键而不必以结束符符串,以回车键而不必以结束符00结束输入,系统结束输入,系统会自动加上一个结束符会自动加上一个结束符00。 同时字符数组名同时字符数组名 c 前也不再加地址符前也不再加地址符& &。 若用一个若用一个scanf 函数输入多个字符串,则以空格作为函数输入多个字符串,则以空格作为字符串之间的分隔。字符串之间的分隔。 函数:函数:gets(字符数组字符数组) 功能:从标准输入设备功能:从标准输入设备( (stdin) )键盘上,读取键盘上,读取1 1个字符个字符串(可以包含空格),并将其存储到字符数组中串(可以包含空格),并将其存储到字符数组中 输入字符串输入字

11、符串gets()函数函数(1)调用方式:)调用方式:gets(字符数组字符数组)(2)函数功能:从标准输入设备)函数功能:从标准输入设备(stdin)键盘上,读取键盘上,读取1个字符个字符串(可以包含空格),并将其存储到字符数组中去。串(可以包含空格),并将其存储到字符数组中去。(3)使用说明)使用说明 1)gets()读取的字符串,其长度没有限制,编程者要保证字读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。符数组有足够大的空间,存放输入的字符串。 2)该函数输入的字符串中允许包含空格,而)该函数输入的字符串中允许包含空格,而scanf()函数函数%s格式

12、不允许。格式不允许。C程序设计 例例 多种方法输入输出字符串多种方法输入输出字符串 #includemain() char str112, str212, str312; int i; for(i=0;i12;i+)scanf(%c,&str2i); for(i=0;i=a&c=A&c=Z) return(1); else return(0); main() int i,num=0; char str255; printf(Input a string: ); gets(str); for(i=0;stri!=0;i+) if ( isalp(stri) ) num+; puts(str);

13、printf(num=%dn,num); getch(); C程序设计字符串数组数组中的每个元素又都是一个存放字符串的一维数组数组中的每个元素又都是一个存放字符串的一维数组用二维字符数组表示用二维字符数组表示char name1080;字符串个数字符串个数每个字符串最大长度每个字符串最大长度C程序设计 例 char diamond5=., .,*,.,*,.,*, *, ., ., . ,*,.,*, .,*,., .,*;二维字符数组初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4 例 char fruit7=“

14、Apple”,”Orange”, ”Grape”,”Pear”,”Peach”;二维字符数组初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00字符串数组初始化字符串数组初始化C程序设计 例例 二维字符数组(字符串数组)二维字符数组(字符串数组) 的改变的改变#include #include main() int i; char a74=sun,mon,tue,wed, thu,wen,sat; printf(Result is:n); a03=&; a23=&; a53=&; for ( i=0; i7;

15、i+ ) printf(string of a%d=%sn,i,ai); s u n & m o n 0 t u e & w e d 0 t h u 0 w e n & s a t 0aC程序设计10.210.2 字符串处理函数字符串处理函数字符串标准函数的原型在头文件字符串标准函数的原型在头文件string.h中中。C程序设计 1 1拷贝字符串拷贝字符串 strcpy()函数函数(1 1)调用方式:)调用方式:strcpy( (字符数组字符数组, , 字符串字符串) ) 其中其中“字符串字符串”可以是串常量或字符数组。可以是串常量或字符数组。(2 2)函数功能:将)函数功能:将“字符串字符串

16、”完整地复制到完整地复制到“字符数字符数组组”中,字符数组中原有内容被覆盖。中,字符数组中原有内容被覆盖。(3 3)使用说明)使用说明1 1)字符数组必须定义得足够大,以便容纳复制过来的)字符数组必须定义得足够大,以便容纳复制过来的字符串。连同结束标志字符串。连同结束标志00一起复制。一起复制。2 2)不能用赋值运算符)不能用赋值运算符“”将一个字符串直接赋值给将一个字符串直接赋值给一个字符数组,只能用一个字符数组,只能用strcpy()函数来处理。函数来处理。C程序设计#include main( ) int i; char name16=pear; char name223=Apple&B

17、anana; printf(Result is:n); printf(1:name1-%sn, name1); printf(2:name2-%sn, name2); strcpy(name2,name1); printf (“3:name1-%sn, name1); printf (“4:name2-%sn, name2); printf (“5:name1-); for (i=0;i=11;i+) printf(%c,name2i); 例例 字符拷贝函数字符拷贝函数 strcpy ()进行字符串复制进行字符串复制 将将name1中的中的字符串连同字符串连同0一一 起复制到起复制到name2

18、 C程序设计复复制制后后Name1 p e ar 0Name2 P e ar& B a n an a 00Name1 p e ar 0Name2A p pl& B a n an a 0e复复制制前前运行结果如下运行结果如下:C程序设计 2连接字符串连接字符串strcat()()函数函数(1 1)调用方式:)调用方式:strcat(字符数组字符数组, , 字符串字符串) )(2 2)函数功能:)函数功能: 把把“字符串字符串”连接到连接到“字符数组字符数组”中的字符串尾端,中的字符串尾端,并存储于并存储于“字符数组字符数组”中中。“字符数组字符数组”中原来的结束标中原来的结束标志,被志,被“字符

19、串字符串”的第一个字符覆盖,而的第一个字符覆盖,而“字符串字符串”在操在操作中未被修改。作中未被修改。(3 3)使用说明)使用说明: : 1 1)由于没有边界检查,要保证)由于没有边界检查,要保证“字符数组字符数组”定义得定义得足够大,以便容纳连接后的目标字符串足够大,以便容纳连接后的目标字符串 2 2)连接前两个字符串都有结束标志连接前两个字符串都有结束标志00,连接后,连接后“字符数组字符数组”中存储的字符串的结束标志中存储的字符串的结束标志00被舍弃,只被舍弃,只在目标串的最后保留一个在目标串的最后保留一个00。C程序设计例例 字符串连接。字符串连接。#include main() in

20、t i; char name113=pear; char name26=apple; printf(Result is:n); printf(1-%sn,name1); strcat(name1,name2); printf(2-%sn,name1); for (i=0; name1i!=0 ;i+)printf(%c,name1i); Name1 P e a r0l0 Name2 A p pe Name1 P e a rp p l e 0A运行结果:运行结果:Result is:1-pear2-PearApplePearAppleC程序设计3字符串比较字符串比较strcmp()()函数函数(

21、1)格式:)格式:strcmp(字符串字符串1,字符串字符串2)(2)功能:比较两个字符串功能:比较两个字符串(3)比较规则:对两串从左向右逐个字符比较(比较规则:对两串从左向右逐个字符比较(ASCII码),码), 直到遇到不同字符或直到遇到不同字符或0为止为止(4)返值:返回返值:返回int型整数,型整数,a. 若字符串若字符串1 字符串字符串2, 返回正整数返回正整数 c. 若字符串若字符串1= 字符串字符串2, 返回零返回零(5)说明:字符串比较不能用说明:字符串比较不能用“=”,必须用必须用strcmpabcd= =abcd0ABCDC程序设计main() char s1=abcd;

22、char s2=ABCD; char s3=“command; int result1,result2; result1=strcmp(s1,s2); result2=strcmp(s1,s3); if(result10) printf(s1s2n); else if(result1=0) printf(s1=s2n); else printf(s1s2n); printf(result2=%dn,result2);例例 strcmp 函数的应用函数的应用C程序设计例例 strcmp 函数的应用函数的应用#include stdio.hmain() char passstr80; int i=

23、0; while(1) printf(请输入密码请输入密码n); gets(passstr); /*输入密码输入密码*/ if (strcmp(passstr,“password”)!=0) printf(口令错误,按任意键继续口令错误,按任意键继续); else break; /*输入正确的密码,中止循环输入正确的密码,中止循环*/ i+; if(i=3) exit(0); /*输入三次错误密码退出程序输入三次错误密码退出程序*/ fun(); /*输入正确密码所进入的程序段输入正确密码所进入的程序段*/ C程序设计 4 4字符串长度函数字符串长度函数strlen 格式格式:strlen(字

24、符数组字符数组) 作用:测试字符串长度作用:测试字符串长度 函数值:为字符串的实际长度,不包括函数值:为字符串的实际长度,不包括00在内。在内。 例如例如: strlen(“china”); 结果是结果是5。 若改成若改成: char str10=“china”; strlen(str); 结果也是结果也是5,不要误认为是,不要误认为是10或是或是6。例例 对于以下字符串,对于以下字符串,strlen(s)的值为:的值为:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:答案:1 3 1C程序设计#in

25、clude #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); strcat(str,str1); else strcpy(str,str1); len3=strlen(str); put

26、s(str); printf(”Len1=%d,Len2=%d,Len3=%dn”,len1,len2,len3);How are you?Hello!Len1=6,Len2=12,Len3=18例 strcmp与strlen举例C程序设计 5.5.字符串小写函数字符串小写函数strlwr 格式:格式:strlwr(字符串字符串) 作用:将字符串的大写字母转换成小写字母。作用:将字符串的大写字母转换成小写字母。 请给出下面程序结果。请给出下面程序结果。 main() char str1=CHINA; printf(n%s,strlwr(str1); 运行结果运行结果:china 6 6字符串大

27、写函数字符串大写函数strupr 格式格式:strupr(字符串字符串) 作用:将字符串中的小写字母转换成大写字母。作用:将字符串中的小写字母转换成大写字母。 C程序设计例例 反向显示字符串反向显示字符串#include #include void backwards(char s,int index); /* 函数声明函数声明*/ void main() char str80; int index = 0; strcpy(str,Show this string.); /*字符串拷贝字符串拷贝*/ backwards(str,index); /*函数调用函数调用*/void backwards(char s,int index) /*函数定义函数定义*/ if (sindex) printf(%c,sindex); /*输出字符输出字符*/ backwards(s,index+1) ; /* 递归调用递归调用*/ printf(%c,sindex); /* 输出字符输出字符*/ 用字符数组名作函数参数用字符数组名作函数参数C程序设计main( ) int i, j, t, a9; printf(input 10 numbers :n); for (

温馨提示

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

评论

0/150

提交评论