已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,数据的组织结构字符串,第四章,三、字符数组与字符串,2,字符串的组织,字符串是指一个有限长度的字符序列,并且用0字符结尾( 0作为字符串的结束标志) 字符串常量用一个双引号(“”)括起来 例: “C program” “blue” C语言中,没有直接提供字符串数据类型,字符串存储在字符数组中 “C program”的存储,3,实现字符串的方法,用一维字符型数组定义 char array10 ; 可以用array0array9存放 9 个字符。 字符串的初始化 可以用数组的初始化方法进行字符串的初始化 char str = C, , p, r, o, g, r, a, m, 0; 把字符串作为整体进行初始化 char str = “C program”; (自动在末尾加0),4,说明 用字符型数组存放字符串时,在有效字符后自动加0 字符串中所包含字符的个数称为字符串长度 例如,“blue”的长度为4,但占5个字节 (0占一位) 字符串占用数组元素的个数为字符串长数加1,5,【例】字符串示例 #include main( ) int i=0; char a =“K“; char b = “Sit down“ ; while(ai!=0) putchar(ai); i+; printf(“n“); i=0; while(bi!=0) putchar(bi); i+; ,省略了2,常用0判断是否结束循环,等价于K,0,6,字符串与字符数组的区别 字符数组是变量,用于存放字符型数据,包括字符串;字符串是数据,存放在字符数组中,是一串用0 结束的字符 字符数组的长度可以大于字符串的长度,7,字符串与字符数组区别,字符串放在字符数组中,应包含结束符 char str = C, ,p,r,o,m,g,r,a,m,0; printf(“%snn“, str); 下列情况可能输出不可识别字符(乱码) char str1 = C, ,p,r,o,m,g,r,a,m; printf(“%snn“, str1);,8,字符串的结束符0,0是字符串结束标志,有关字符串处理的所有函数都要求用0结束。如果将字符串按字符一个一个地处理就需要人为地添加这个结束符。,9,程序段: 逐个从键盘接受一个字符串并打印。 char str20; int i=0; while (1) /*输入回车后结束*/ if (stri+=getchar( )=n) break; stri-1=0; /人为地添加字符串的结束符 printf(“%s”,str); / 用“0”替换了“n”,10,程序段:逐个输出字符串的内容。 i= 0; while(stri != 0) /* 遇到字符串 结束时停止输出 */ putchar(stri); i+; putchar(“n”);,11,【例】字符串的输入输出示例。 #include main( ) char a10, b10; gets(a); scanf(“%s”,b); puts(a); printf(“%sn”,b); ,必须开辟足够大的空间,运行结果: Sit down Sit down Sit down Sit,遇空格、跳格符或回车符,认为字符串输入结束,%s,gets( ),puts( ) 在stdio.h中。,基于一维数组的字符串操作 字符串的输入输出,12,字符串的输入(整体输入),标准函数 scanf(“%s”, str); /* 自动添加0 */ gets(str); /* 把换行符转换为0 */ 其中str是存放字符串的数组名称, 如:char str20; 注意事项 用“%s”输入字符串时是用空格符、换行符或制表符作为输入结束,在字符串中不能含有这些符号 用“%s”格式符时,对应的输入变量str前不能有& gets( ) 函数以换行符作为输入的结束,在输入的字符串中允许包含空格和制表符,13,输出字符串(整体输出),将字符串的内容显示到标准输出设备屏幕上 标准函数 printf(“%s”, str); /* 只有输出,不换行 */ puts(str); /* 输出并换行 */ 其中str是存放字符串的数组名称,定义: char str20; str所指的字符串必须用0结束 puts( ) 输出后,自动换行 scanf( )输出后,要人为添加换行符“n”,14,字符串输出举例,char str = “Hello“; puts(str); puts(str); 显示结果: Hello Hello,char str = “Hello“; printf(“%s%s“, str,str); 显示结果: HelloHello,15,字符串标准函数 在C语言的标准函数库中,提供了数十种与字符串处理有关的标准函数,从而大大地提高了字符串处理的能力,降低了字符串处理的复杂程度。,常用字符串标准函数及应用实例,16,字符串转换成数值类型 (P98 例4-7) atof(str); -将字符串str转换成一个double值 atoi(str); -将字符串str转换成普通整型(int) atol(str); -将字符串str转换成长整型(long) 原型在 stdlib.h中,其中str是数字字符串,数值类型转换成字符串 (P99 例4-8) itoa(num, str, radix); num是一个int类型的数值 ltoa(num, str, radix); num是一个long类型的数值 其中str用于存放结果的字符串,radix是用户指定的进制数,它的取值必须介于236之间,17,大小写转换 strlwr(str); -所有大写字母转换成小写字母 strupr(str); -所有小写字母转换成大写字母 函数原型都在 string.h中,实例:统计一段文本中每个英文字母出现的次数(小写都被认为是大写)。,教材 P101 例4-9,18,#include #include #include #define NUM 26 main( ) int letterNUM = 0; /* 用于存放统计结果的一维数组 */ char str80; /* 存放以字符串形式输入的文本 */ int i; printf(“nEnter a text line“); gets(str); /* 输入文本 */ strupr(str); /* 将文本中的所有小写字母转换成大写字母 */ for (i=0; stri!=0; i+) /* 统计每个字母出现的次数 */ /* isalpha判ch中是否为字母,是则返回非0,否则返回0 */ if (isalpha(stri) letterstri-A = letterstri-A+1; for (i=0; iNUM; i+) /* 输出统计结果 */ printf(“n%c:%d“, A+i, letteri); ,程序代码,与教材P8485 例4-2比较,19,计算字符串长度 strlen(str); -返回字符串中所包含的字符个数,即字符串长度,0不计算在内。 字符串比较 strcmp(str1, str2); -比较字符串str1与str2的大小 若str1=str2 函数返回值=0 若str1str2 函数返回值0 若str1 “ABC” “ABCD” = “ABCD”,字符串处理函数,20,实例 假设用户的密码是“administrators”,下面这个程序将用于检测用户输入的密码是否正确。如果不正确,给出相应的提示信息,并请求用户重新输入。,教材 P102 例4-10,21,#include #include main( ) char password20; /* 存放用户输入的密码 */ printf(“nEnter password: “); gets(password); /* 输入密码 */ /* 检测用户输入的密码,如果不正确,给出提示,并请求重新输入 */ while (strcmp(password, “administrators“) != 0) printf(“nInvalid passwordnn“); printf(“Enter password, again: “); gets(password); printf(“OK“); /*输入正确,显示“OK“*/ ,程序代码,问题: 要限制密码输入的次数(3次),应如何修改,22,字符串拷贝 strcpy(str1, str2); - 将字符串str2拷贝到字符串str1中 str1是用于存放拷贝结果的存储区域,例D-1:从键盘输入若干单词,找出最长的单词,问题分析 与找最大值类似 因不知输入的单词数量,不能确定循环次数,以空字符串作为结束标志 用字符串的长度进行比较,但要保存当前最长字符串和其长度,23,#include #include main() char str80, maxstr80; int max=0, len; do printf(“Enter a string:“); gets(str); len=strlen(str); if(lenmax) strcpy(maxstr,str); max=len; while(len0); printf(“The max string is %sn“,maxstr); ,24,字符串连接 strcat(str1, str2); - 将str2连接在str1之后,并在结束处添加一个字符串结束符0,实例:根据用户的选择输出相应的字符串。,教材 P104 例4-11,说明 显示一个菜单,用户选择一项,则可以输出与该项相关的信息,25,#include #include main( ) char str180 = “This is a “; char str2 = “ program.“; char str3 = “Java“; char str4 = “Pascal“; char str5 = “C“; char str6 = “C+“; int choice; printf(“n = MENU =n“); /* 菜单 */ printf(“n Java . . 1“); printf(“n Pascal . 2“); printf(“n C . . 3“); printf(“n C+ 4“); printf(“n choice:“); scanf(“%d“, /* 用户做出选择 */,程序代码,只给出部分初值,26,switch (choice) /* 根据用户的选择拼接字符串 */ case 1: strcat(str1, str3); strcat(str1, str2); break; case 2: strcat(str1, str4); strcat(str1, str2); break; case 3: strcat(str1, str5); strcat(str1, str2); break; case 4: strcat(str1, str6); strcat(str1, str2); break; default: strcpy(str1, “Error“); /* 被覆盖,可用strcat */ break; printf(“n%s“, str1); /* 显示字符串 */ ,27,文本变换,例4-12:文本加密、解密,有规律地改变文本中字符的ASCII码,达到加密的目的 阅读时,以相反的规律改变文本中字符的ASCII码,达到解密的目的,28,#include #include #include main( ) int i; char text1000; gets(text); /* 输入文本内容 */ for (i=0; texti!=0; i+) if (isalnum(texti) texti = texti+5; /* 变换 */ puts(text); for (i=0; texti!=0; i+) if (isalnum(texti) texti = texti-5; /* 还原 */ puts(text); ,程序代码,判断参数为字母或数字,返回真。原型在 ctype.h中,29,求子串函数 strstr(str1, str2); str1是主串,str2是子串 若在str1中存在子串str2,则返回子串str2在主串中第一次出现(第一个字符)的位置(指针);否则返回空 在字串中找字符出现位置的函数 strchr(str1, ch); str1是一个给定的字符串,ch 是所要查找的字符 若在str1中存在字符ch,则返回ch在字符串str1中第一次出现的位置(指针) ;否则返回空,30,四、二维数组,二维数组 由M行N列具有相同性质的数据组成,有两个下标值唯一确定一个元素。 定义格式: 数组名行长度列长度; double arr 10 20 ; 存储时按行排列 下标范围 arr 0 0 - arr 9 19 表示数据共200个元素 数组元素访问 arr 0 0 = arr 1 2 + 9.2; -用下标访问 数组元素的引用形式:数组名下标下标,31,二维数组的存储,例如: int a34; 数据表示共12个元素,所占存储空间大小(即字节数): sizeof(元素类型)元素数量(即行数列数),内存状态:先行后列,32,二维数组的初始化,分行给二维数组赋初值 int a34=1,2,3,4,5,6,7,8,9,10,11,12; 按数组排列顺序对各元素赋初值 int a34=1,2,3,4,5,6,7,8,9,10,11,12; 在对全部数组元素赋初值时,可以不指定数组行长度 int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 对部分元素赋初值 int a34=1,5,9; int a34=1,5,9;,33,二维数组的引用,赋值 int a23; a00=1 a01=1 a02=1 a10=1 a11=1 a12=1,for(i=0;i2;i+),for(j=0;j3;j+) aij=1;,输入 for(i=0; i2; i+) for(j=0; j3; j+) scanf(“%d”, ,输出 for(i=0; i2; i+) for(j=0; j3; j+) printf(“%d”, aij); printf(“n”);, ,34,例 转置矩阵的计算,#include main( ) int x 3 2 = 1,2, 3,4, 5,6 ; int y 2 3 ; int i, j; for( i=0; i3; i+ ) for( j=0; j2; j+ ) y j i = x i j ; /* 输出2行3列的矩阵 */ ,35,例:判定给定方阵是否为对称矩阵,每个元素都应满足 arrayij = arrayji 判断对称性,只需用下三角的每个元素与对应的上三角元素进行比较,教材P109 例4-13,36,#include #define NUM 5 /* 矩阵行列数*/ main( ) int mNUMNUM; /*定义二维数组变量*/ int i, j; /* 输入矩阵 */ printf(“Enter %d rows %d cols datas for the maxtrix:n“,NUM,NUM); for (i=0; iNUM; i+) for (j=0; jNUM; j+) scanf(“%d“, ,37,/* 判断矩阵是否对称并输出相应的结果 */ for (i=0; iNUM; i+) for (j=0; ji; j+) if (mij!=mji) printf(“nThe matrix isnt symmetrical.“); return 0; printf(“nThe matrix is symmetrical.“); ,38,第4章 第二部分作业,阅读教科书第四章(字符数组与字符串、二维数组) 一、阅读 P119 3 二、编程题 P120 7、8 P120 9,10(选作) 三、上机 P120 7 P121 2,39,P120 第7题 提示,设单词之间用空格(可以有多个)或回车符(可以有多个)隔开 跳过前导空格(也可不考虑) 循环开始(结束条件:遇到0) 若字符是非空格或回车,则累加字符个数(单词长度),否则,表示前面是一个单词,记录当前最长单词的长度 找到后面第一个非空格、回车的字符,则可能是下一个单词的开始,40,附录、 字符串处理函数和实现相应功能的部分自编程序(补充自学),求字符串长度 strlen( ) 字符串复制 strcpy( ) 字符串连接 strcat( ) 字符串比较 strcmp( ),41,#include #include main( ) char a80; int count; gets(a); count=strlen(a); printf(“%s: %dn“,a,count); ,运行结果: I am OK I am OK: 7,问:strlen(“Good”)的值?,【例1_1】求字符串长度函数的使用。,42,【例1_2】求串长自编程序 #include main( ) char a80; int i=0,count=0; gets(a); while( ai != 0 ) count+; i+; printf(“%s: %dn“,a,count); ,43,#include #include main( ) char a50,b80; gets(a); strcpy(b,a); puts(b); ,运行结果: I am OK I am OK,/*给a输入*/,/*输出b中串*/,【例2_1】字符串复制函数的使用。,44,char a5=”ABCD”,b5=”abcd”; char temp5; strcpy(temp,a); strcpy(a,b); strcpy(b,temp);,交换两个数组中字符串:,45,【例2_2】字符串复制的自编程序。,a,b, ,while( ai!=0 ) bi=ai; i+; ,bi=0;,46,#include main( ) int i=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 居家照料服务合同范例
- 充电桩承包运营合同范例
- 学校除四害合同模板
- 医用胶 合同范例
- 充电转租赁合同范例
- 医院仪器投放合同范例
- 技工劳动合同范例
- 店铺转让商铺合同范例
- 就业入职合同范例
- 2024年兰州客运资格证试题及答案选择题
- 幼儿园大班数学《6的组成与分解》课件
- 消化内镜护士进修汇报
- 07《车迟国斗法》-《西游记》故事精讲精练
- 年产100万瓶工业气体、医用氧气充装项目可研报告
- 单位反恐专项经费保障制度
- 前程无忧国企招聘笔试题库
- 信息网络传播权的侵权认定及其保护
- DL-T 1071-2023 电力大件运输规范
- 部编版一年级上册语文第二单元 作业设计
- GB/T 44143-2024科技人才评价规范
- 专题03正比例函数和反比例函数(原卷版+解析)
评论
0/150
提交评论