函数readDat()的功能是从文件in52.dat中读取20行数据存放到字符串数组xx中(每行字符串的长度均小于80)。请编制函数JsSort(),该函数的功能是:以行为单位对字符串变量的下标为奇数位置上的字符按其ASCII值从小到大的顺序进行排序,排序

admin2009-02-19  37

问题 函数readDat()的功能是从文件in52.dat中读取20行数据存放到字符串数组xx中(每行字符串的长度均小于80)。请编制函数JsSort(),该函数的功能是:以行为单位对字符串变量的下标为奇数位置上的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数 wfiteDat()把结果xx输出到文件out52.dat中。
   例如:    位置  0  1  2  3  4  5  6  7
         源字符串  h  S  f  e  d  c  b  a
   则处理后字符串  h  a  f  c  d  e  b  g。
   注意:部分源程序已给出。
   请勿改动主函数main()、读函数readDat()和写.函数writeD6L()的内容。
   试题程序:
       #include
       #include
       #include
       char XX[20][80];
       void isSort()
       {
   
       }
   
       void main()
       {
           readDat();
           jsSort();
           writeDat();
       }
       readDat()
      {
           FILE *in;
           int i=0;
           char *p;
           in=fopen("in52.dat","r");
           while(i<20 && fgets(xx 80,in)!=NULL)
           {
                p=strchr(xx,’\n’);
                if(p) ap=0;
                i++;
           }
           fclose(in);
      }
      
      writeDat ( )
      {
           FILE *out;
           int i;
           out=fopen("out52.dat","w");
           clrscr();
           for(i=0;i<20;i++)
           {
               printf("%s\n",xx);
               fprintf(out,"%s\n",xx);
           }
      fclose(out);
      }

选项

答案void jsSort() { int i,j,k,strl; char ch; for(i=0;i<20;i++) { strl=strlen(xx[i]); /*求各行字符串的长度*/ for(j=1;j<strl-2;j=j+2) /*将下标为奇数的字符按其ASCII值从小到大的顺 序进行排序*/ for(k=j+2;k<strl;k=k+2) if(xx[i][j]>xx[i] [k]) { ch=xx[i][j]; xx[i][j]=xx[i] [k]; xx[i][k]=ch; } } }

解析 本题考查的知识点如下:
(1)二维数组的访问及下标控制。
(2)数据的排序。
在本题中,将数据存放在一个二维数组xx中。其中以行数为数组的第一个下标,以字符串的最大长度80为其第二个下标。因为以行为字符串处理的单位,首先要使用函数strlcn()求得每一行中字符的个数。只对字符串数组中下标为奇数的字符进行处理,可以从xx[0][1]开始,若需要增加时都增加2,则可实现只访问下标为奇数的数组元素。排序使用前面介绍的“选择排序法”。
转载请注明原文地址:https://kaotiyun.com/show/cdcZ777K
0

最新回复(0)