函数Rdata()实现从文件IN.dat中读取一篇英文文章存入字符串数组string中,请编写函数SortCharA(),其功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字爷串数组string中。最后调用函数Wdata(),把

admin2010-09-05  61

问题 函数Rdata()实现从文件IN.dat中读取一篇英文文章存入字符串数组string中,请编写函数SortCharA(),其功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字爷串数组string中。最后调用函数Wdata(),把结果string输出到OUT.dat文件中。
   例如,原文:dAe, BfC.
               CcbbAA
         结果:,. ABCdef
               AACbbc
   原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。
   注意:部分源程序已经给出。请勿改动主函数main()、读数据函数Rdata()和输出数据函数Wdata()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
char  string [50] [80];
int maxline = 0;   /* 文章的总行数 */
int Rdata (void);
void Wdata (void);
void SortCharA(void)
{

}
void main ()
{  if (Rdata ())
  {   printf("数据文件 IN. dat 不能打开! \n\007");
      return;
  }
  SortCharA ();
  Wdata ( );
}
int Rdata (void)
{   FILE  *fp;
   int  i = 0;
   char  *p;
   if ((fp = fopen("IN. dat", "r")) == NULL)
      return 1;
   while (fgets(string, 80, fp)  != NULL)
   {   p = strchr(string,  ’\n’);
       if (p)
           *p = 0;
       i++;
   }
   maxline = i;
   fclose (fp);
   return 0;
}
void Wdata (void)
{   FILE  *fp;
   int  i;
   fp = fopen("OUT. dat",  "w");
   for (i=0; i<maxline; i++)
   {   printf("%s\n",  string);
       fprintf(fp, "%s\n",  string);
   }
   fclose (fp);
}

选项

答案void SortCharA (void) { int i, j, k, str1; char ch; for (i=0; i<maxline; i++) { str1 = strlen(string[i]); for (j=0; j<str1-1; j++) for (k=j+1; k<str1; k++) if (string[i] [j] > string [i] [k]) { ch = string[i] [j]; string[i] [j] = string[i] [k]; string[i] [k] = ch; } } } [解题思路] 这里采用strlen字符函数获取字符串的长度;对文章中的每一行的字符利用双重循环进行两两比较,较小的字符往行前放,较大的字符往行后放,这样就实现了以行为单位对字符从小到大的排序。在程序中的语句是if(string[i][j]>string[i][k])成立,string[i][j]和string[i][k]就交换数据。

解析
转载请注明原文地址:https://kaotiyun.com/show/VuvZ777K
0

最新回复(0)