版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,字符串排序 6 19 31(字符串一般排序) ( 45 70 95 左右比较) 68(指针),类型四 字符串排序,函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数SortCharA( ), 其函数的功能是: 以行为单位对字符按从小到大的顺序进行排序, 排序后的结果仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。 例: 原文: dAe,BfC. CCbbAA 结果: ,.ABCdef AACCbb 原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含标点符号和空格。
2、注意: 部分源程序存放在PROG1.C中。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat() 的内容。 (06套),#include #include char xx5080 ; unsigned int maxline = 0 ; /* 文章的总行数 */ int ReadDat(void) ; void WriteDat(void) ; void SortCharA(void) void main() if(ReadDat() printf(数据文件IN.DAT不能打开!n007) ; return ; SortCharA() ; WriteDat
3、() ; ,int ReadDat(void) FILE *fp ; int i = 0 ; char *p ; if(fp = fopen(c:testIN.DAT, r) = NULL) return 1 ; while(fgets(xxi, 80, fp) != NULL) p = strchr(xxi, n) ; if(p) *p = 0 ; i+ ; maxline = i ; fclose(fp) ; return 0 ; void WriteDat(void) FILE *fp ; unsigned int i ; fp = fopen(c:testOUT.DAT, w) ; f
4、or(i = 0 ; i maxline ; i+) printf(%sn, xxi) ; fprintf(fp, %sn, xxi) ; fclose(fp) ; ,本题的关键是对字符串进行排序 每行字符串存放在二维字符数组xx中 需要解决的问题 1、整个二维数组有多少行 2、每行有多少字符,编程点拨,Maxline,循环的次数 每次循环内,进行排序,不是80,需通过strlen函数求得,strlen函数形参 第0行字符个数,strlen(xx)还是strlen(xx0) strlen(xx00),代码,void SortCharA(void) char ch ; unsigned int
5、i, j, k ,len; for(i = 0 ; i maxline ; i+) ,maxline 是全局变量 其值已经获得 对maxline行进行排序,for(j = 0 ; j xxik) ch = xxik ; xxik = xxij ; xxij = ch ; ,len=strlen(xxi),对第i行字符串进行排序 先求得该行的字符个数,用比较交换法 对第i行字符串进行排序,函数readDat()是从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是: 以行为单位对字符串变量的下标为奇数的位置上的字符按其A
6、SCII值从小到大的顺序进行排序,下标为偶数的位置上的字符仍按原来位置存放, 排序后的结果仍按行重新存入字符串数组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文件中。 请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat() 和写函数writeDat()的内容。(19套),#include #include void readDat(); void wri
7、teDat(); char xx2080 ; void jsSort() void main() readDat() ; jsSort() ; writeDat() ; ,void readDat() FILE *in ; int i = 0 ; char *p ; in = fopen(c:testin.dat, r) ; while(i 20 ,本题是要求对字符串中的字符按其ASCII值的升序进行排序。 对20行字符串进行排序,所以需要循环20次 每次循环 实现一个字符串按奇数下标排序,代码,void jsSort() char ch ; int i, j, k ; for(i = 0 ;
8、 i 20 ; i+) ,对20行字符串进行处理,每行字符串按奇数下标排序,for(j = 1 ; j xxik) ch = xxik ; xxik = xxij ; xxij = ch ; ,外循环j下标从1开始,步长为2 内循环k从j+2开始,步长为2,字符串左右排序,函数readDat()是从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是: 以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件out.dat中。 条件: 从
9、字符串中间一分为二, 左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。如果原字符串长度为奇数, 则最中间的字符不参加排序, 字符仍放在原位置上。 例如: 位置 0 1 2 3 4 5 6 7 8 源字符串 a b c d h g f e 1 2 3 4 9 8 7 6 5 则处理后字符串 d c b a e f g h 4 3 2 1 9 5 6 7 8 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。(45套),#include #inclu
10、de #include char xx2080; void jsSort() void main() readDat(); jsSort(); writeDat(); ,readDat() FILE *in; int i=0; char *p; in=fopen(in.dat,r); while(i20 ,需要编程实现,有20行,所以循环20次 每次循环完成: 每行 左半部排序,左半部位置如何确定 xxi指向第i行字符串,求长度 len=strlen(xxi) 中间一分为二后,排序的个数half=len/2 左右半部分别排序 外循环下标和内循环下标如何确定,10,20,30,10,40,50,
11、60,排序位置的确定,10,20,30,10,40,50,60,左半部分外循环从0开始,右半部分:当字符串长度 的奇数,外循环的下标strlen(xxi)/2+1 当字符串长度 的偶数,外循环的下标strlen(xxi)/2,代码,void jsSort() char ch ; int i, j, k, len, half ; for(i = 0 ; i 20 ; i+) ,if(len % 2) half+ ;,len = (int) strlen(xxi) ; half = len / 2 ;,for(j = 0 ; j (half-1) ; j+) for(k = j + 1 ; k h
12、alf ; k+) if(xxij xxik) ch = xxik ; xxik = xxij ; xxij = ch ; ,利用外循环for语句依次取出每行的字符串xxi。,取字符串一半的位置half,再利用二重循环for语句对字符串的左边按降序排序。(交换方法),如果字符串xxi的长度是否是奇数,则half+指向下一字符,如果是偶数,则half值不变。,for(j = half ; j xxik) ch = xxik ; xxik = xxij ; xxij = ch ; ,再利用二重循环for语句对字符串的右边按升序排序,函数readDat()是从文件in.dat中读取20行数据存放到字
13、符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是: 以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件out.dat中。 条件: 从字符串中间一分为二, 左边部分按字符的ASCII值降序排序,右边部分不作处理,排序后,左边部分与右边部分按例子所示进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如: 位置 0 1 2 3 4 5 6 7 8 源字符串 a b c d h g f e 1 2 3 4 9 8 7 6 5 则处理后字符串
14、h g f e d c b a 8 7 6 5 9 4 3 2 1 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat() 和写函数writeDat()的内容。,70套,有20行,所以循环20次 每次循环完成: 每行 左半部排序,左半部位置如何确定 xxi指向第i行字符串,求长度 len=strlen(xxi) 中间位置half=len/2 左右半部交换,代码,void jsSort() int i,len,half,j,k; char ch; for(i=0;i20;i+) /*行循环 i行号*/ ,分析: 对每一行(20行) 先采用冒泡法对左边部分进行升序排序 然后将排序后的左半与右半按对应位进行调换。(20行,20次循环),外循环 有20行,循环2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年个性化教学设计模板美术
- 2024-2025学年习作:猜猜他是谁教案
- 2025-2026学年孙权劝学教学设计导入
- 2025-2026学年如何制作教学设计目录
- 9 天气与动植物教学设计-2025-2026学年小学科学二年级下册青岛版(五四制2024)
- 2025-2026学年高一语文登高教学设计教案
- 2025-2026学年虎头帽教案反思
- 2025-2026学年鸽巢问题教学设计英语
- 2025年高考化学二轮复习教案专题06化学反应与能量变化含答案
- 三、包书皮教学设计小学综合实践活动一年级上册(2018)鲁科版
- 肠梗阻护理个案病例汇报
- 设备升级改造管理制度
- 2025年4月自考06091薪酬管理试题及答案
- 高中生艾滋病预防教育课件
- 2025-2030年中国隔音窗通风口行业市场现状供需分析及投资评估规划分析研究报告
- 路面铣刨合同协议
- 投行业务管理制度
- VTE相关知识培训课件
- 语文七年级下册 第二单元 单元整体分析
- 2.3品味美好情感 课 件 -2024-2025学年统编版道德与法治七年级下册
- 梯笼安装施工方案
评论
0/150
提交评论