C语言“字符串”.ppt

上传人:s****8 文档编号:68599287 上传时间:2022-12-29 格式:PPT 页数:27 大小:167KB
返回 下载 相关 举报
C语言“字符串”.ppt_第1页
第1页 / 共27页
C语言“字符串”.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《C语言“字符串”.ppt》由会员分享,可在线阅读,更多相关《C语言“字符串”.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第10章 字符串第十章第十章 字符串字符串10.1 10.1 字符数组与字符串字符数组与字符串10.2 10.2 指针与字符串指针与字符串12/29/20221C语言程序设计教程第10章 字符串10.1 10.1 字符数组与字符串字符数组与字符串10.1.1 字符数组的定义与初始化字符数组的定义与初始化1.1.字符数组的定义字符数组的定义字符数组字符数组:其元素类型为字符类型的数组,其定义与前面介:其元素类型为字符类型的数组,其定义与前面介 绍的数组定义相同。绍的数组定义相同。例如:例如:char str40;定定义义一一个个有有40个个元元素素的的字字符符数数组组,每每个个元元素素相相当当于

2、于一一个个字字符变量。符变量。char ch530;2.2.字符数组的初始化字符数组的初始化 char ch1=char ch1=a a,b b,c c,d d;char ch26=char ch26=a a,b b;char ch310=char ch310=00;12/29/20222C语言程序设计教程第10章 字符串10.1.2 10.1.2 字符串的概念及存储字符串的概念及存储1.1.字符串及其相关概念字符串及其相关概念字符串:字符串:若干有效字符的序列;若干有效字符的序列;可包含转义字符、可包含转义字符、ASCASC码表中的字符;码表中的字符;形式为:形式为:用双引号括起来的字符序列

3、;用双引号括起来的字符序列;例:例:I am a student.I am a student.,Hello a5=,a5=,fnfn。字符串的长度字符串的长度:字符串中所包含的字符的个数。:字符串中所包含的字符的个数。空串空串:没有一个字符的串。:没有一个字符的串。空格串空格串:包含一个或多个空格的串:包含一个或多个空格的串字符串的结束标志字符串的结束标志:00。注注:字符串存放在字符数组中。:字符串存放在字符数组中。12/29/20223C语言程序设计教程第10章 字符串2.2.用字符串初始化字符数组用字符串初始化字符数组 直接把字符串写在花括号中来初始化字符数组直接把字符串写在花括号中来

4、初始化字符数组如:如:char char chch=“student”;=“student”;花括号可以省略花括号可以省略 系系统统将将双双撇撇号号括括起起来来的的字字符符依依次次赋赋给给字字符符数数组组的的各各个个元元 素素,并并自自动动在在末末尾尾补补上上字字符符串串结结束束标标志志字字符符0。s t u d e n t 0 012/29/20224C语言程序设计教程第10章 字符串几点几点说说明:明:()字字符符串串结结束束标标志志0仅仅用用于于判判断断字字符符串串是是否否结结束,束,输输出字符串出字符串时时不会不会输输出。出。()在在对对有有确确定定大大小小的的字字符符数数组组用用字字

5、符符串串初初始始化化时时,数,数组长组长度度应应大于大于字符串字符串长长度。度。如:如:char s7=char s7=“studentstudent”;是错误的。是错误的。()如如果果花花括括号号中中提提供供的的字字符符个个数数大大于于数数组组长长度度,则则按按语语法法错错误误处处理理;若若小小于于,其其余余的的元元素素自自动动赋赋初初值为空字符(值为空字符(00)。)。(4 4)不不能能直直接接将将字字符符串串赋赋值值给给字字符符数数组组。若若有有定定义义 char char s10;s10;则则 下下 面面 的的 操操 作作 是是 错错 误误 的的。s=s=”studentstudent

6、”;12/29/20225C语言程序设计教程第10章 字符串10.1.3 10.1.3 字符串的输入输出字符串的输入输出1.1.字符串的输出方法字符串的输出方法(1 1)用)用printfprintf函数函数 用用printf输出字符串时,要用格式符输出字符串时,要用格式符“%s”,输输出时出时输出项表中对应的应是所要输出的字符串的起输出项表中对应的应是所要输出的字符串的起始地址,从该起始地址所对应的始地址,从该起始地址所对应的字符开始逐个字符字符开始逐个字符输出,直到遇到第一个输出,直到遇到第一个0为止。为止。例:例:char st15=“I am a boy!”printf(“%sn%s%

7、c”,st,&st7,st7);注意:若用注意:若用%s的格式输出字符串,输出项表中的格式输出字符串,输出项表中对应的应是对应的应是所要输出的字符串的起始地址,或字符所要输出的字符串的起始地址,或字符串常量。串常量。12/29/20226C语言程序设计教程第10章 字符串例例10.1 10.1 字符串输出示例字符串输出示例#include#include main()main()char str20=char str20=”How do you do?How do you do?”;intint k;k;printf(printf(“%s%s”,str,str);/*);/*输出输出strst

8、r中的字符串中的字符串*/for(k=0;strk!=for(k=0;strk!=00;k+);k+)printf(printf(“%c%c”,strk,strk);/*);/*一个一个地输出字符一个一个地输出字符*/输出结果为:输出结果为:How do you do How do you do?How do you do?How do you do?使用格式符使用格式符“%s”输出时,输出时,输出项表中对应的应是所要输出项表中对应的应是所要输出的字符串的起始地址,从该起始地址所对应的输出的字符串的起始地址,从该起始地址所对应的字符开始字符开始逐个字符输出,直到遇到第一个逐个字符输出,直到遇到

9、第一个0为止为止。使用使用”%c”格式时,格式时,用循环实现每个元素的输出。用循环实现每个元素的输出。12/29/20227C语言程序设计教程第10章 字符串(2)用)用puts函数输出字符串函数输出字符串 调用格式:调用格式:puts(strputs(str););函数功能:将字符串函数功能:将字符串strstr输出。输出。strstr应是所要输出应是所要输出字符串的起始地址,或字符串常量。字符串的起始地址,或字符串常量。从该地址所对应从该地址所对应的的字符开始逐个字符输出,直到遇到第一个字符开始逐个字符输出,直到遇到第一个0为止,为止,同时将同时将 0 0转换成换行符。转换成换行符。因此,

10、用因此,用puts()puts()输出一行,不必另加换行符输出一行,不必另加换行符nn。例:例:char char chch=student;=student;puts(chputs(ch);puts(&ch3);puts(Hello););puts(&ch3);puts(Hello);函数函数putsputs每次只能输出一个字符串,而每次只能输出一个字符串,而printfprintf可以输可以输出几个:出几个:printf(%s%s,str1,str2);printf(%s%s,str1,str2);12/29/20228C语言程序设计教程第10章 字符串 2.2.字符串的输入字符串的输入(

11、1)使用使用scanf函数输入字符串函数输入字符串例:例:char st15;scanf(“%s”,st);/*将所输入的字符串读到以将所输入的字符串读到以st为起始地为起始地 址的、连续的内存单元中。址的、连续的内存单元中。*/但:但:scanf(“%s”,&st)是错误的,因为是错误的,因为st就代表了该字就代表了该字 符符数组的首地址。数组的首地址。注注:输入时,以:输入时,以回车回车或或空格空格作为结束标志;作为结束标志;即:用即:用scanf输入的字符串中不能含有空格。输入的字符串中不能含有空格。若按如下方法输入:若按如下方法输入:How do you do?执行语句执行语句:sca

12、nf(%s,st);则则st的内容为的内容为:How0 使使用用格格式式字字符符串串%s%s时时会会自自动动加加上上结结束束标标志志00。第第一一个个空空格后的字符没有输入格后的字符没有输入st st中。中。12/29/20229C语言程序设计教程第10章 字符串(2)使用函数使用函数gets()输入字符输入字符调用格式调用格式:gets(str);函数功能函数功能:从键盘读入一个字符串到以:从键盘读入一个字符串到以str为为起始地起始地址的、连续的址的、连续的内存单元中,并自动在末尾加字符串内存单元中,并自动在末尾加字符串结束标志符结束标志符0。输入字符串时以回车结束输入,这种方式可以输入字

13、符串时以回车结束输入,这种方式可以读入含空格符的字符串读入含空格符的字符串如:如:char s14;gets(s);若输入的字符串为:若输入的字符串为:How do you do?则则s 的内容为的内容为:How do you do?012/29/202210C语言程序设计教程第10章 字符串例例10.2 10.2 字符串输入输出示例字符串输入输出示例#include main()char s20,s120;scanf(“%s”,s);printf(“%sn”,s);scanf(“%s%s”,s,s1);printf(“s=%s,s1=%s”,s,s1);puts(“n”);gets(s);p

14、uts(s);程序运行过程程序运行过程:How do you do?Hows=do,s1=youdo?注:注:代表空格代表空格12/29/202211C语言程序设计教程第10章 字符串10.1.4 字符串处理函数 语言库函数中除了前面用到的库函数语言库函数中除了前面用到的库函数getsgets()()与与puts()puts()之外,还提供了一些常用的库函数,之外,还提供了一些常用的库函数,其函数在其函数在string.hstring.h中中1.字符串拷贝函数:字符串拷贝函数:strcpy()调用格式调用格式:strcpy(d_str,s_str);功功 能能:将以:将以s_str为起始地址的

15、字符串或字为起始地址的字符串或字符串常量符串常量(连同连同00)复制到以复制到以d_str为为起始起始地址的、连续的内存地址的、连续的内存中。中。说说 明明:d_strd_str在内存中所占的字节数应不在内存中所占的字节数应不小于小于s_strs_str在内存中所占的字节数。在内存中所占的字节数。12/29/202212C语言程序设计教程第10章 字符串例例:char s110,s28=char s110,s28=“studentstudent”,s36;,s36;strcpy(s1,s2);strcpy(s1,s2);将将s2s2中的中的“studentstudent”赋给赋给s1s1(连同

16、结束标志连同结束标志00),s2,s2的值不变,的值不变,strcpy(s3,okey);okeystrcpy(s3,okey);okey赋给赋给s3;s3;注意:不能直接使用赋值语句来实现拷贝或赋值。注意:不能直接使用赋值语句来实现拷贝或赋值。如:如:s1=s2;s1=“student”;都是不允许的。;都是不允许的。12/29/202213C语言程序设计教程第10章 字符串2.2.字符串连接函数字符串连接函数strcatstrcat()()调用格式:调用格式:strcat(d_str,s_strstrcat(d_str,s_str););功功能能:将将s_strs_str连连同同00连连接

17、接到到d_strd_str的的最最后后一一个个字字符符(非(非00字符)后面。结果放在字符)后面。结果放在d_strd_str中。中。例:例:char s114=char s114=“I am a I am a”;char s25=char s25=“boy.boy.”;strcat(s1,s2);strcat(s1,s2);连接前:连接前:s1:s1:s2:s2:连接后:连接后:s1s1 I a m a 0b o y .0I a m a b o y .012/29/202214C语言程序设计教程第10章 字符串 3.3.字符串比较函数字符串比较函数strcmpstrcmp()()调用格式:调

18、用格式:strcmp(str1,str2);strcmp(str1,str2);功能:功能:若若str1=str2str1=str2,则函数返回值为则函数返回值为0 0;若若str1str2str1str2,则函数返回值为正整数;则函数返回值为正整数;若若str1str2str1=n)p+=n-1;else exit(0););for(;*p!=0;p+,q+)*q=*p;*q=0;printf(String a:%sn,a);printf(String b:%sn,b);考考虑虑:若若输输出出语语句句改改为为如如下下语语句会如何?句会如何?printf(“string a is:%sn”,p

19、);printf(“string b is%sn”,q);12/29/202220C语言程序设计教程第10章 字符串 虽然用字符数组和字符指针变量都能实现对字符串虽然用字符数组和字符指针变量都能实现对字符串的访问,但它们之间是有区别的,不应混为一谈,主的访问,但它们之间是有区别的,不应混为一谈,主要有以下几点:要有以下几点:4 4、字符指针变量和字符数组之间的区别、字符指针变量和字符数组之间的区别(1 1)字符数组字符数组由若干个元素组成,由若干个元素组成,每个元素中放每个元素中放一个字符一个字符,而,而字符指针变量中存放的是字符的地址字符指针变量中存放的是字符的地址,不是将字符串放到字符指针

20、变量中。不是将字符串放到字符指针变量中。(2)(2)赋值方式。对字符数组只能对各个元素赋值,赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。不能用以下办法对字符数组赋值。char string9;string=”Chinese!”char string9;string=”Chinese!”;(错误错误)而对字符指针变量,可以采用下面方法赋值:而对字符指针变量,可以采用下面方法赋值:char*s;s=”Chinese!”;(正确)(正确)但注意赋给但注意赋给s的不的不是字符串,而是字符串的首地址,也即是字符串,而是字符串的首地址,也即CC的地址。的地址。12/29/2022

21、21C语言程序设计教程第10章 字符串(3)(3)读入一个字符串时可以采用下面的方法:读入一个字符串时可以采用下面的方法:char str80;char str80;scanf(“%s”,strscanf(“%s”,str)(正确)(正确)但不可以这样但不可以这样:char*achar*a;scanf(“%s”,ascanf(“%s”,a););(错误)(错误)(为什么?应该怎样修改?)为什么?应该怎样修改?)正确方法:正确方法:char*a,str80;a=str;scanf(“%s”,a);先使先使a有确定值,也就是使有确定值,也就是使a指向一个数组的开头,然指向一个数组的开头,然后输入一

22、个字符串,把它存放在以该地址开始的若干后输入一个字符串,把它存放在以该地址开始的若干单元中。单元中。(4)指针变量的值是可以改变的,而数组名虽然代表指针变量的值是可以改变的,而数组名虽然代表地址,但它的值是不能改变的。地址,但它的值是不能改变的。12/29/202222C语言程序设计教程第10章 字符串10.2.2 字符串数组字符串数组 字符串数组字符串数组:是指数组中的每个元素都是一个:是指数组中的每个元素都是一个 存放字符串的数组。存放字符串的数组。字符串数组可以用一个二维字符数组来存储。字符串数组可以用一个二维字符数组来存储。例如:例如:char languge3 10;数组的第一个下标

23、决定字符串的个数,第二个下数组的第一个下标决定字符串的个数,第二个下标标是是字字符符串串的的最最大大长长度度(实实际际最最多多9个个字字符符,0占占一位置)。一位置)。可以对字符串数组进行初始化。例如:可以对字符串数组进行初始化。例如:char languge3 10=“Basic”,“c”,“pascal”;12/29/202223C语言程序设计教程第10章 字符串例例10.5:字符串数组的输入、输出与排序:字符串数组的输入、输出与排序#define N 5#define MaxLen 20#include#include void SortString(char nameMaxLen,in

24、t k);main()char nameNMaxLen;int k;printf(“nplease input%d strings:”,N);for(k=0;kN;k+)gets(namek);SortString(name,N);for(k=0;kN;k+)puts(namek);12/29/202224C语言程序设计教程第10章 字符串void SortString(char nameMaxLen,int k)int i,j;char tempMaxLen;for(j=0;jk-1;j+)for(i=0;i0)strcpy(temp,namei);strcpy(namei,namei+1)

25、;strcpy(namei+1,temp);12/29/202225C语言程序设计教程第10章 字符串例例10.6:利用指针数组作为函数参数对字符串数组进:利用指针数组作为函数参数对字符串数组进行排序。行排序。#define N 3#define MaxLen 20#include#include void SortString(char*name,int k);main()char*nameN=bc,abc,ab;int k;SortString(name,N);for(k=0;kN;k+)puts(namek);12/29/202226C语言程序设计教程第10章 字符串void SortString(char*name,int k)int i,j;char*temp;for(j=0;jk-1;j+)for(i=0;i0)temp=namei;namei=namei+1;namei+1=temp;12/29/202227C语言程序设计教程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁