三级数据库技术上机4-字符串专题

上传人:今*** 文档编号:106797875 上传时间:2019-10-16 格式:PPT 页数:60 大小:690.50KB
返回 下载 相关 举报
三级数据库技术上机4-字符串专题_第1页
第1页 / 共60页
三级数据库技术上机4-字符串专题_第2页
第2页 / 共60页
三级数据库技术上机4-字符串专题_第3页
第3页 / 共60页
三级数据库技术上机4-字符串专题_第4页
第4页 / 共60页
三级数据库技术上机4-字符串专题_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《三级数据库技术上机4-字符串专题》由会员分享,可在线阅读,更多相关《三级数据库技术上机4-字符串专题(60页珍藏版)》请在金锄头文库上搜索。

1、字符串专题,上机考试时出现最多的几类题,复习-字符和字符串的比较,数值、字符的比较用= 如a=a;b=A;if(a=b) 字符串的比较只能用strcmp a=“hello”;b=“hellO”;if(strcmp(a,b)=0) 如果ab函数返回0的数 如果ab函数返回0的数 如果a=b函数返回0,注意-字符串的表示,字符数组,字符指针,存储内容:连续的存储空间存储字符串中的每个字符,以/0结束 赋值方式: 声明 char Str10; 用于存储字符,最多10个 用于存储字符串,最多9个,最后以0结尾 例 char Str=“hello” 实际内容为h,e,l,l,o, 数组名即字符数组首地址

2、不能修改,字符数组,存储内容:字符指针变量中存储的是字符串的首地址 赋值方式:对字符指针变量,可采用下面的赋值语句赋值: char *pointer; pointer=“This is a example.“; 字符指针变量可以修改,字符串的表示-字符指针,加 密,对char数据类型的疑惑,char 数据类型的特殊之处,既可以根据上下文被当作字符,也可以被当作数字,参与运算。例如,表示字符是大写字母的写法: if (ch=65 & ch=A & ch=0 & ch=48 & ch=57),常用的字符串处理函数(2),用途:测试字符串的实际长度,其中不包括0 。 例如: char str1=“C

3、hina“; printf(“%d“,strlen(str1); 结果:输出5,strlen: string length 用法:strlen(字符数组(或字符串),常用的字符串处理函数(3),功能:判断字符ch是否为英文字母,当c为英文字母a-z或A-Z时,返回非零值,否则返回零。,isalpha 原型:int isalpha(int ch),注意,读文章题,通常是一个二维数组,第一维是行数,第二维是每行的第几个字符 有maxline的题目,文章行数一定要用maxline 这种题目通常是二重循环 外层取第i行 内层对第i行的第j个字符分析 j的取值是从0到第i行的长度,即strlen(xxi

4、) 通常内层循环里面会有一个if语句,第11套(同类题型12,13,36,37,38,61,62,86,87),函数ReadDat()实现从文件IN.DAT中读取一篇英文文章,存入到无符号字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,其替代值仍存入数组xx所对应的位置上,最后调用函数WriteDat()把结果xx输出到文件OUT.DAT中。 替代关系:f(p)=p*11 mod 256, mod为取余运算,p是数组xx中某一个字符的ASCII值, f(p)是计算后的无符号整型值(注意:中间变量定义成整型变量), 如果计算后f(p)值小于

5、等于32或大于130,则该字符不变, 否则用f(p)替代所对应的字符。,分析,程序结构 for(i=0;imaxline;i+) for(j=0;jstrlen(xxi);j+) if(满足替换条件) 替换 注意 因为如果计算后f(p)值。,则该字符不变 所以if里面给的是不满足条件的表达式 !取非,不要想当然的直接写 结果是乱码不要以为是错了,行 编 辑,第6套(31),函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数SortCharA( ), 其函数的功能是: 以行为单位对字符按从小到大的顺序进行排序, 排序后的结果仍按行重新存入字符串数组

6、xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。 例: 原文: dAe,BfC. CCbbAA 结果: ,.ABCdef AACCbb,分析,以行为单位:通过循环一次取一行(第i行) 取到第i行后排序(二重循环排序。j,k) 这种循环控制变量多的千万不要写错 共三重循环 程序结构,for(i=0;imaxline;i+) for(j=0;jstrlen(i);j+) for(k=j+1;kstrlen(i)-1;k+) if(xxij OP xxij) 三步,第19套,函数readDat()是从文件in.dat中读取20行数据存放到字符串数组xx中

7、(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是: 以行为单位对字符串变量的下标为奇数的位置上的字符按其ASCII值从小到大的顺序进行排序,下标为偶数的位置上的字符仍按原来位置存放, 排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到out.dat文件中。 例如: 位置 0 1 2 3 4 5 6 7 源字符串 h g f e d c b a 则处理后字符串 h a f c d e b g 注意: 部分源程序存在文件PROG1.C文件中。,分析,外层循环取第i行 内层循环排序,注意排序的时候的两个循环控制变量j,k都为奇数 fo

8、r(j=1;jstrlen(xxi);j=j+2) for(k=j+2;jstrlen(xxi);j=j+2),常用的字符串处理函数(4),功能:把字符串s的所有字符的顺序颠倒过来(不包括空字符NULL)。 说明:返回指向颠倒顺序后的字符串指针。,strrev:string reverse 用法:strrev(字符串),第8套,函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到无符号字符串数组xx中; 请编制函数ChA( ), 其函数的功能是: 以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值, 得到第一个新的值, 存入数组单元xxi0中(其中: i

9、是文章中的某行)。第二个字符的ASCII值加第三个字符的ASCII值, 得到第二个新的值,存入数组单元xxi1中。以此类推一直处理到最后第二个字符, 最后一个字符的ASCII值加原第一个字符的ASCII值, 得到最后一个新的值, 存放在原字符串对应的位置上, 之后把已处理的字符串逆转后仍按行重新存入无符号字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到OUT.DAT文件中。 原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含标点符号和空格, 并也按它的ASCII值作以上处理。,分析,以第i行为例 xxi0=xxi0+xxi1; xxi1=xxi1+x

10、xi2; xxi3=xxi3+xxi4; xxi4=xxi4+xxi5; 即xxij=xxij+xxij+1;(jstrlen(xxi) - 1) xxi0要先保存 执行完后为xxij+1赋值 翻转,Ascii码位操作,第33套(同类型57,82) P96,函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数CharConvA(),其函数的功能是: 以该文章中的行为单位把字符串中的最后一个字符的ASCII值右移4位二进制位,高位补0后加最后第二个字符的ASCII值, 得到最后一个新的值,最后第二个字符的ASCII值右移4位二进制位, 高位补0后加最

11、后第三个字符的ASCII值, 得到最后第二个新的值, 以此类推一直处理到第二个字符。 注意:第一个字符的ASCII值加原最后一个字符的ASCII值, 得到第一个新的值。得到的新值分别存放在原字符串对应的位置上,之后把已处理的结果仍按行重新存入数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。 原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含标点符号和空格, 并也按字符处理。,分析,注意,此类题文字描述通常都很繁琐,要抽丝剥茧,找出主要意思。一般是移位操作后,要么和它前面元素相加,要么是和后面元素相加。注意循环变量j,是该递增,还是该递

12、减,取决于从哪边开始算。 33套思路: 设j从strlen(xxi)-1取到1 xxij=(xxij4)+xxij-1 注意:移位运算一定要带括号 保存最后一个元素,依次递减,从后往前处理,33套答案,int i,j,len;/循环变量 char tmp; /临时变量 for(i=0;i=1;j+)/遍历特定行的所有列 xxij=(xxij4)+xxij-1; /内存循环j结束后,单独处理下标为0的元素 xxi0+=tmp; /end of for i,57套提醒 P155,题目中定义字符数组的时候,使用的是语句unsigned char xx5080,也就是使用了unsigned说明是无符号

13、类型。因此,自己定义char类型的临时变量时,应该是: unsigned char tmp; 题目条件是,如果左移四位后,值小于等于32或大于100,则字符不变。否则,就把左移位的值,加上字符原先的ASCII值,语句是: tmp=(xxij 100) ) xxij+=tmp; 不要把这里的tmp换成xxij 4,一分为二题型(稍难),常用的字符串处理函数(5),用途:将字符串2拷贝到字符数组中。 例如:char str110;str2=“China” strcpy(str1,str2); 字符数组1必须是写成数组名,字符串2可以是数组名也可以是一个字符串。 又如:strcpy(str1, “c

14、hina“);,strcpy: string copy 用法:strcpy(字符数组1,字符串2),常用的字符串处理函数,如下面的赋值是不合法的。 char str1=“China”,str220; str2=str1;() 下面的赋值是合法的。 char a5,c1,c2; c1=A; c2=B; a0=C;a1=h,a2=i;a3=n;a4=a,不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。但可以给一个字符变量或字符数组元素赋值。,常用的字符串处理函数(6),用途:把两个字符串连接在一起,组成一个字符串 ;字符数组2中的字符串连接到字符数组1中的字符串后面,并删去原字符数组

15、1后面的“0”,最后将结果存在字符数组1中 。 例如: char str16=“Ch”;str2=“ina”; strcat(str1,str2); 结果:str1成了“China”,而str2不变。,strcat: string catenate 用法:strcat(字符串1,字符串2),常用的字符串处理函数(7),功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的0)并添加0。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。,strncat 用法: strncat(char *dest,char *src,int n);,对字符数组的困惑 (见教程12页),(1)对一维的字符数组,只给出数组名的时候,该名称代表字符数组首字符的内存地址。数组名可以加上数字,从而得到数组中后续字符的内存地址。 (2)对二维的字符数组,只给出第一维的下标时,代表此下标所指定行的第一个字符的内存地址。同样,也可以加上数字得到其它字符的地址。例如二维数组char ch1080有10行和80列,ch2表示下标为2的第三行字符串的第一个字符的内存地址。,第45套(70),函数

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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