c程序设计基础09

上传人:飞*** 文档编号:54518968 上传时间:2018-09-14 格式:PPT 页数:24 大小:380KB
返回 下载 相关 举报
c程序设计基础09_第1页
第1页 / 共24页
c程序设计基础09_第2页
第2页 / 共24页
c程序设计基础09_第3页
第3页 / 共24页
c程序设计基础09_第4页
第4页 / 共24页
c程序设计基础09_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《c程序设计基础09》由会员分享,可在线阅读,更多相关《c程序设计基础09(24页珍藏版)》请在金锄头文库上搜索。

1、第十章,预处理命令,回顾,函数的作用 函数的声明格式和各部分作用 函数中的实参和形参的区别 函数的调用,目标,字符信息在计算机中的描述 字符信息的存储方式 字符信息的处理函数,字符串,字符型数组可以存放若干个字符,这些字符合在一起代表一个完整的语义,如员工的名字,而这一组字符就被称作为字符串。,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;,字符串,字符数组是存

2、放字符型数据的数组,其中每个数组元素存放的值都是单个字符。,字符串是程序设计中必不可少的一种数据类型,它是由若干个字符组成的,并且用双引号括起来表示。在有效字符后,最后一个字符是结束标记(0)。,字符串结束符,中文字符串,中文常用汉字太多,没有办法象英文那样用一个字节即256个数字就能描述所有英文所需要的字母、数字、符号等,所以计算机中的中文通常是采用2个字节即64K个数字,来描述中文的一些常用汉字、数字、符号等。,英文可以用一个字节即256个数字就能描述所有英文所需要的字母、数字、符号等,九个英文字母所占据的9个字节加上1个字符串结束标记0,共10个字节。,两个汉字所占据的4个字节加上1个字

3、符串结束标记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 ; /*声明一个有

4、个元素的数组*/int n=0; /*定义字符串长度计数器,并且该 计数器也做为数组元素下标*/doscanf(“%c“, ,字符数组示例(二),#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; ,格式描述串中使用转

5、意字符%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,

6、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“

7、,length);getchar();return 0; ,strlen函数计算字符串长度时,类似于我们使用%s格式控制符输出数组中的字符串,它不会事先计算数组中字符串的长度,只是单纯的依次读取数组中的元素,直到遇到字符串结束标记,字符串处理函数(二),strcpy(字符数组,字符串),第二个参数作为原字符串可以是字符串,也可以是包含字符串的字符数组;第一个参数作为目的地只能是存储字符串的字符数组。,将一个字符串中的所有字符复制到另一个字符串中,#include “stdio.h“ #include “string.h“ void main() char source=“zengcobra“;

8、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; /必须事先指定数组的长度s

9、trcpy(destin,source); /将原数组中的内容写入到目的数组中printf(“原字符串:%sn“,source);printf(“目的字符串:%sn“,destin); strcpy(destination,“is a nice guy”); /连接上一个字符串常量printf(“%sn“,destination); ,字符串处理函数(二),目的字符串的长度必须事先定义好,而且还要足够大。像这样的定义是不行的:,会直接报编译错误:unknown size,表明目的字符数组的长度未知,char destination ; strcpy(destination, source);,

10、strcpy(字符数组,字符串),将一个字符串中的所有字符复制到另一个字符串中,即便在目的字符数组声明时指定了长度,也要保证长度足够大,能容纳得了原字符串。否则就会出现运行时错误。,字符串处理函数(三),strcat(字符数组名,字符串),将第二个字符串接在第一个字符串的后面,形成一个新字符串;然后将新产生的字符串保存在一个数组中,第一参数是存放有字符串的数组,在函数中作为代连接字符串的前半部分,并且新字符串也是保存在这个数组中的;而第二个参数可以是一个字符串常量,也可以是一个字符数组。,#include “stdio.h“ #include “string.h“ void main() ch

11、ar s140=“zengcobra “;char s2=“is a nice guy“; printf(“第一个字符串:%sn“,s1);printf(“第二个字符串:%sn“,s2);strcat(s1,s2); /连接之后得到新字符串printf(“连接之后的字符串:%sn“,s1); ,s1作为字符串连接的前半段字符串,并且新产生的字符串也被保存在这个数组中。s2作为字符数组,保存了字符串连接的后半段字符串。s2字符数组也可以换成字符串常量。,字符串处理函数(三),字符串连接函数使用时,重要的一点是作为第一个参数的字符数组要足够大,大到能够存放连接后产生的新字符串,否则将产生编译错误:

12、array bounds overflow,表明数组越界。即声明的数组无法存储连接的字符串。同时也要注意数组声明时,长度为两个代连接字符串有效字符个数的基础上加1,比如第一个字符串为”zengcobra ”包含10个有效字符,而第二个字符串”is a nice guy”包含13个有效字符,那么数组长度必须要设定为24个元素。否则就会出现运行时错误:,二维字符数组,知道了二维数组作为一个整体,能够存储更大的数据量,并且代表更加复杂的语义。其实二维数组比较多的应用是在字符串的应用中。我们可以通过二维字符数组来表示若干个具备整体意义的字符串。,我们可以认为每一句诗作为一个一维字符数组,然后将四个一维

13、数组合并在一起形成一个二维数组,数组中的每一行就是一句诗,二维字符数组示例(一),#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(

14、poemlength0=#) /*判断第length行的第0个元素是不是为#, 如果是则退出*/break; printf(“nn %sn“,poem0); printf(“ -%sn“,poem1); for(int i=2;ilength;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+)get

15、s(ai) /*利用string.h中定义的gets函数完成字符串输入到数组中*/if(ai0=#) /*判断第i行的第个元素是不是为#, 如果是则退出*/break;,二维字符数组示例(三),for(j=0;jj;k-) /*第i-1轮从下向上共比较i-1-j次*/if(strcmp(ak,ak-1)0) /*相邻两个比较,小者上调*/strcpy(b,ak);strcpy(ak,ak-1);strcpy(ak-1,b);for(j=0;ji;j+)puts(aj);return 0; ,二维字符数组示例(四),加密程序,将代加密的明文输入,进行加密,在进行解密,#include “stdio.h“ #include “string.h“ void main() char s80;int i=0;printf(“请输入代加密的字符串:“);gets(s);while(si!=0) si=si+3; /对每个字符加上3使其变为密文i+;printf(“加密之后变为:%sn“,s);,

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号