第四次上机实验内容字符串排序_第1页
第四次上机实验内容字符串排序_第2页
第四次上机实验内容字符串排序_第3页
第四次上机实验内容字符串排序_第4页
第四次上机实验内容字符串排序_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

字符串排序61931(字符串一般排序)(457095左右比较)68(指针)1类型四字符串排序2函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数SortCharA(),其函数的功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT.DAT中。例:原文:dAe,BfC.CCbbAA结果:,.ABCdefAACCbb原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序存放在PROG1.C中。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。(06套)3#include<stdio.h>#include<string.h>charxx[50][80];unsignedintmaxline=0;/*文章的总行数*/intReadDat(void);voidWriteDat(void);voidSortCharA(void){}voidmain(){if(ReadDat()){printf("数据文件IN.DAT不能打开!\n\007");return;}SortCharA();WriteDat();}intReadDat(void){FILE*fp;inti=0;char*p;if((fp=fopen("c:\\test\\IN.DAT","r"))==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],'\n');if(p)*p=0;i++;}maxline=i;fclose(fp);return0;}voidWriteDat(void){FILE*fp;unsignedinti;fp=fopen("c:\\test\\OUT.DAT","w");for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}4本题的关键是对字符串进行排序每行字符串存放在二维字符数组xx中需要解决的问题1、整个二维数组有多少行2、每行有多少字符编程点拨Maxline,循环的次数每次循环内,进行排序不是80,需通过strlen函数求得sryu\0ebq\0na\0xx[0]xx[1]xx[2]strlen函数形参第0行字符个数strlen(xx)还是strlen(xx[0])strlen(xx[0][0])代码5voidSortCharA(void){charch;unsignedinti,j,k,len;

for(i=0;i<maxline;i++){

}}maxline是全局变量其值已经获得对maxline行进行排序for(j=0;j<len-1;j++)for(k=j+1;k<len;k++)if(xx[i][j]>xx[i][k]){ch=xx[i][k];xx[i][k]=xx[i][j];xx[i][j]=ch;}len=strlen(xx[i])对第i行字符串进行排序先求得该行的字符个数用比较交换法对第i行字符串进行排序6函数readDat()是从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串变量的下标为奇数的位置上的字符按其ASCII值从小到大的顺序进行排序,下标为偶数的位置上的字符仍按原来位置存放,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到out.dat文件中。例如:位置01234567源字符串hgfedcba则处理后字符串hafcdebg注意:部分源程序存在文件PROG1.C文件中。请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。(19套)7#include<stdio.h>#include<string.h>voidreadDat();voidwriteDat();charxx[20][80];voidjsSort(){}voidmain(){readDat();jsSort();writeDat();}voidreadDat(){FILE*in;inti=0;char*p;in=fopen("c:\\test\\in.dat","r");while(i<20&&fgets(xx[i],80,in)!=NULL){p=strchr(xx[i],'\n');if(p)*p=0;i++;}fclose(in);}voidwriteDat(){FILE*out;inti;out=fopen("c:\\test\\out.dat","w");for(i=0;i<20;i++){printf("%s\n",xx[i]);fprintf(out,"%s\n",xx[i]);}fclose(out);}8本题是要求对字符串中的字符按其ASCII值的升序进行排序。对20行字符串进行排序,所以需要循环20次每次循环实现一个字符串按奇数下标排序代码9voidjsSort(){charch;inti,j,k;for(i=0;i<20;i++){}}对20行字符串进行处理每行字符串按奇数下标排序for(j=1;j<(int)strlen(xx[i])-1;j+=2)for(k=j+2;k<(int)strlen(xx[i]);k+=2)if(xx[i][j]>xx[i][k]){ch=xx[i][k];xx[i][k]=xx[i][j];xx[i][j]=ch;}

外循环j下标从1开始,步长为2内循环k从j+2开始,步长为210字符串左右排序11函数readDat()是从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件out.dat中。条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。例如:位置012345678源字符串abcdhgfe123498765则处理后字符串dcbaefgh432195678注意:部分源程序存在文件PROG1.C文件中。请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。(45套)12#include<stdio.h>#include<string.h>#include<conio.h>

charxx[20][80];

voidjsSort(){

}

voidmain(){readDat();jsSort();writeDat();}

readDat(){FILE*in;inti=0;char*p;

in=fopen("in.dat","r");while(i<20&&fgets(xx[i],80,in)!=NULL){p=strchr(xx[i],'\n');if(p)*p=0;i++;}fclose(in);}

writeDat(){FILE*out();inti;clrscr();out=fopen("out.dat","w");for(i=0;i<20;i++){printf(\"%s\n",xx[i]);fprintf(out,"%s\n",xx[i]);}fclose(out);}需要编程实现13有20行,所以循环20次每次循环完成:每行左半部排序,左半部位置如何确定xx[i]指向第i行字符串,求长度len=strlen(xx[i])中间一分为二后,排序的个数half=len/2左右半部分别排序外循环下标和内循环下标如何确定1020301040506014排序位置的确定10203010405060左半部分外循环从0开始右半部分:当字符串长度的奇数,外循环的下标strlen(xx[i])/2+1当字符串长度的偶数,外循环的下标strlen(xx[i])/2代码15voidjsSort(){charch;inti,j,k,len,half;for(i=0;i<20;i++){

}}if(len%2)half++;len=(int)strlen(xx[i]);half=len/2;for(j=0;j<(half-1);j++)for(k=j+1;k<half;k++)if(xx[i][j]<xx[i][k]){ch=xx[i][k];xx[i][k]=xx[i][j];xx[i][j]=ch;}利用外循环for语句依次取出每行的字符串xx[i]。取字符串一半的位置half再利用二重循环for语句对字符串的左边按降序排序。(交换方法)如果字符串xx[i]的长度是否是奇数,则half++指向下一字符,如果是偶数,则half值不变。for(j=half;j<(len-1);j++)for(k=j+1;k<len;k++)if(xx[i][j]>xx[i][k]){ch=xx[i][k];xx[i][k]=xx[i][j];xx[i][j]=ch;}再利用二重循环for语句对字符串的右边按升序排序16函数readDat()是从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件out.dat中。条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分不作处理,排序后,左边部分与右边部分按例子所示进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。例如:位置012345678源字符串abcdhgfe123498765则处理后字符串hgfedcba876594321注意:部分源程序存在文件PROG1.C文件中。请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。70套17有20行,所以循环20次每次循环完成:每行左半部排序,左半部位置如何确定xx[i]指向第i行字符串,求长度len=strlen(xx[i])中间位置half=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论