c程序设计基础09

上传人:痛*** 文档编号:244292338 上传时间:2024-10-03 格式:PPT 页数:24 大小:380KB
返回 下载 相关 举报
c程序设计基础09_第1页
第1页 / 共24页
c程序设计基础09_第2页
第2页 / 共24页
c程序设计基础09_第3页
第3页 / 共24页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第十章,预处理命令,回顾,函数的作用,函数的声明格式和各部分作用,函数中的实参和形参的区别,函数的调用,目标,字符信息在计算机中的描述,字符信息的存储方式,字符信息的处理函数,字符串,字符型数组可以存放若干个字符,这些字符合在一起代表一个完整的语义,如员工的名字,而这一组字符就被称作为,字符串,。,Z,E,N,G,C,O,B,R,A,char a=z;,char b=e;,char c=n;,char d=g;,char e=c;,char f=o;,char g=b;,char h=r;,char i=a;,描述完整信息时,变量定义太多,使用不方便,字符变量可以存储字符,char a=Y;,char a=N;,字符串,字符数组是存放字符型数据的数组,其中每个数组元素存放的值都是单个字符。,字符串是程序设计中必不可少的一种数据类型,它是由若干个字符组成的,并且用双引号括起来表示。在有效字符后,最后一个字符是结束标记,(0),。,H,e,l,l,o,W,o,r,l,d,0,字符串结束符,中文字符串,中文常用汉字太多,没有办法象英文那样用一个字节即,256,个数字就能描述所有英文所需要的字母、数字、符号等,所以计算机中的中文通常是采用,2,个字节即,64K,个数字,来描述中文的一些常用汉字、数字、符号等。,Z,E,N,G,C,O,B,R,A,0,张,三,0,英文可以用一个字节即,256,个数字就能描述所有英文所需要的字母、数字、符号等,九个英文字母所占据的,9,个字节加上,1,个字符串结束标记,0,,共,10,个字节。,两个汉字所占据的,4,个字节加上,1,个字符串结束标记,0,,共,5,个字节,字符串与字符数组,在语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串,字符数组和字符串的区别是:字符串的末尾有一个空字符,0,字符串可按如下方式声明并初始化:,char name15=,z,e,n,g,c,o,b,r,a,0;,char name15=“,zengcobra,;,char password,=12345678;,省略数组大小,系统自动计算,大小为后面的字符总数加,1,,最后一个元素存入一个空字符。,系统将自动加入一个空字符,手工加入一个空字符,字符数组示例(一),void main(),char a40;/*,声明一个有个元素的数组*,/,int,n=0;/*,定义字符串长度计数器,并且该 计数器也做为数组元素下标*,/,do,scanf(%c,&an,);/*,读取第一个字符存储到数组相应位置*,/,if(A,=,an)&(an,=Z)/*,判断写入到数组中的元素是否是大写字母*,/,an,+=32;/*,如果是大写字母则在其上加上,变为小写字母*,/,n+;/*,位置后移一个*,/,while(an-1!=n);/*,判断输入的字符是否是回车,如果是则推出循环*,/,n=n-1;/*n,减一后当前下标定位到最后输入的回车符*,/,for(int,i=0;i=,n;i,+),/*,通过循环输出了数组中的所有元素,包括最后的 回车 符,如果循环判断条件变为,n,,则输出到回 车换行前*,/,printf(%c,ai,);,字符数组示例(二),#include,stdio.h,void main(),char s140;,printf(%s,请输入员工姓名,回车键结束,n);,scanf(%s,s1);,/,经过相应的计算得到员工的工资,这里假设为。,printf(%s,员工姓名:,);,printf(%s,s1);,printf(%s,n,员工工资:,);,printf(%.2f,3000.0);/*,控制输出,仅输出两位小数*,/,return 0;,格式描述串中使用转意字符,%s,,代表输入的是字符串,字符串处理函数(一),与字符串有关的内置函数在头文件,string.h,中定义,要使用标准库字符串处理函数,程序前应该包含:,#include,size_t,类型,strlen,(,字符串,),size_t,实际上是在,string.h,头文件中定义的,unsigned,无符号整数类型,意味着函数的返回值即所求得的字符串的长度为非负数。,测试指定字符串的长度除字符串结束标记外的所有字符的个数。,strlen,示例(一),#include,stdio.h,#include,string.h,int,main(),char s1=,zengcobra,;,char s2=,z,e,n,g,c,o,b,r,a,;,char s3=z,e,n,g,c,o,b,r,a,0;,size_t,length=,strlen(zengcobra,);,printf,(,字符串,zengcobra,的长度:,%,dn,length,);,length=strlen(s1);,printf,(,用字符串初始化数组的长度:,%,dn,length,);,strlen,示例(二),length=strlen(s2);,printf,(,用单个字符依次初始化数组中元素的数组长度:,%,dn,length,);,length=strlen(s3);,printf,(,用单个字符依次初始化数组中元素,并手动加上字符串结束标记的数组长度:,%,dn,length,);,getchar,();,return 0;,strlen,函数计算字符串长度时,类似于我们使用,%s,格式控制符输出数组中的字符串,它不会事先计算数组中字符串的长度,只是单纯的依次读取数组中的元素,直到遇到字符串结束标记,字符串处理函数(二),strcpy,(,字符数组,字符串,),第二个参数作为原字符串可以是字符串,也可以是包含字符串的字符数组;第一个参数作为目的地只能是存储字符串的字符数组。,将一个字符串中的所有字符复制到另一个字符串中,#include,stdio.h,#include,string.h,void main(),char source=,zengcobra,;,char destin40;/,必须事先指定数组的长度,strcpy(destin,source,);/,将原数组中的内容写入到目的数组中,printf,(,原字符串:,%,sn,source,);,printf,(,目的字符串:,%,sn,destin,);,strcpy(destination,“is,a nice guy”);/,连接上一个字符串常量,printf(%sn,destination,);,#include,stdio.h,#include,string.h,void main(),char source=,zengcobra,;,char destin40;/,必须事先指定数组的长度,strcpy(destin,source,);/,将原数组中的内容写入到目的数组中,printf,(,原字符串:,%,sn,source,);,printf,(,目的字符串:,%,sn,destin,);,strcpy(destination,“is,a nice guy”);/,连接上一个字符串常量,printf(%sn,destination,);,字符串处理函数(二),目的字符串的长度必须事先定义好,而且还要足够大。像这样的定义是不行的:,会直接报编译错误:,unknown size,,表明目的字符数组的长度未知,char destination ;,strcpy(destination,source);,strcpy,(,字符数组,字符串,),将一个字符串中的所有字符复制到另一个字符串中,即便在目的字符数组声明时指定了长度,也要保证长度足够大,能容纳得了原字符串。否则就会出现运行时错误。,字符串处理函数(三),strcat,(,字符数组名,字符串,),将第二个字符串接在第一个字符串的后面,形成一个新字符串;然后将新产生的字符串保存在一个数组中,第一参数是存放有字符串的数组,在函数中作为代连接字符串的前半部分,并且新字符串也是保存在这个数组中的;而第二个参数可以是一个字符串常量,也可以是一个字符数组。,#include,stdio.h,#include,string.h,void main(),char s140=,zengcobra,;,char s2=is a nice guy;,printf,(,第一个字符串:,%sn,s1);,printf,(,第二个字符串:,%sn,s2);,strcat(s1,s2);/,连接之后得到新字符串,printf,(,连接之后的字符串:,%sn,s1);,s1,作为字符串连接的前半段字符串,并且新产生的字符串也被保存在这个数组中。,s2,作为字符数组,保存了字符串连接的后半段字符串。,s2,字符数组也可以换成字符串常量。,字符串处理函数(三),字符串连接函数使用时,重要的一点是作为第一个参数的字符数组要足够大,大到能够存放连接后产生的新字符串,否则将产生编译错误:,array bounds overflow,,表明数组越界。即声明的数组无法存储连接的字符串。同时也要注意数组声明时,长度为两个代连接字符串有效字符个数的基础上加,1,比如第一个字符串为”,zengcobra,”,包含,10,个有效字符,而第二个字符串”,is a nice guy”,包含,13,个有效字符,那么数组长度必须要设定为,24,个元素。否则就会出现运行时错误:,二维字符数组,知道了二维数组作为一个整体,能够存储更大的数据量,并且代表更加复杂的语义。其实二维数组比较多的应用是在字符串的应用中。我们可以通过二维字符数组来表示若干个具备整体意义的字符串。,悄,悄,的,我,走,了,,,正,如,我,轻,轻,的,来,;,我,轻,轻,的,招,手,,,作,别,西,天,的,云,彩,。,我们可以认为每一句诗作为一个一维字符数组,然后将四个一维数组合并在一起形成一个二维数组,数组中的每一行就是一句诗,二维字符数组示例(一),#include,stdio.h,int,main(),char poem1040;,int,length;,printf,(,请输入诗的名字,n);,scanf(%s,poem0);/,利用,scanf,函数,对二维数组中的一行赋值,printf,(,请输入作者的名字,n);,scanf(%s,poem1);,printf,(,请输入诗句,每输入一句请敲击回车键,结束请敲击,#,键,n);,for(length,=2;length10;length+),二维字符数组示例(二),scanf(%s,poemlength,);,if(poemlength0=#)/*,判断第,length,行的第,0,个元素是不是为,#,如果是则退出*,/,break;,printf(nn,%sn,poem0);,printf,(-%sn,poem1);,for(int,i=2;i,length;i,+),printf,(%,sn,poemi,);,return 0;,二维字符数组示例(三),#include,stdio.h,#include,string.h,int,main(),char a1020,b20;,int,i,j,k,;,printf,(,请输入员工姓名,每个姓名以回车分隔,最后以,#,结束,n);,for(i,=0;i10;i+),gets(ai,)/*,利用,string.h,中定义的,gets,函数完成字符串输入到数组中*,/,if(ai0=#)/*,判断第,i,行的第个元素是不是为,#,如果是则退出*,/,break;,二维字符数组示例(三),for(j,=0;j,j;k,-)/*,第,i-1,轮从下向上共比较,i-1-j,次*,/,if(strcmp(ak,ak-1)0)/*,相邻两个比较,小者上调*,/,strcpy(b,ak,);,strcpy(ak,ak-1)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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