文件格式变换

时间: 1ms        内存:128M

描述:

在打印社工作的小侯接到一个新任务,需要将一份文本文件data.dic的部分内容按照特殊要求打印。
已知文件有m(<25)行文字,每行最多有n(<80)个ascii字符,打印时按照古文书写格式自上而下,自右向左显示文字内容。比如一个具有5行10列的文件如下:
Nothing is
 impossibl
e to a wil
ling heart
.
文件的第1行至第5行按照古文书写格式输出为10行5列的文字如下:
. l  e    N
  i     i  o
  n t m t
  g o p h
       o  i
  h a s n
  e    s g
  a w i  
  r  i  b i
  t  l  l  s
请帮助小侯完成程序设计。

输入:

文件 data.dic 需要输出的内容的起始和结束行数。

输出:

按照古文书写格式输出。

示例输入:

3 4

示例输出:

le
i 
nt
go
  
ha
e 
aw
ri
tl

提示:

参考答案(内存最优[0]):

#include<stdio.h>
int main()
{
    char a[26][81];
    int x=1,y=0,c,d,h,m,n;
    char ch;
    scanf("%d%d",&m,&n);
    FILE *fin;
    fin=fopen("data.dic","r");
    while(fscanf(fin,"%c",&ch)!=EOF)
    {
        y++;
        if(ch=='\n'){x++;h=y;y=0;}
        else a[x][y]=ch;
    }
    fclose(fin);
    for(c=1;c<h;c++)
    {
        for(d=n;d>=m;d--)
        printf("%c",a[d][c]);
        printf("\n");
    }
        return 0;
}

参考答案(时间最优[0]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char data[26][81];
    int i,j,rows,cols,num;
    int startrow,endrow;
    FILE *fin;          /* 输入文件 */
    fin=fopen("data.dic","r");     /* 打开输入文件读 */
    if(!fin)     /* 文件打开失败 */
    {
        fprintf(stderr,"error open file!\n");       /* 输出错误信息到标准错误设备 */
        exit(-1);       /* 强制退出,并返回错误码 */
    }
    scanf("%d%d",&startrow,&endrow);
    for(i=1; i<startrow; i++)	/* 跳过前面行  */
        fgets(data[0],81,fin);
    memset((void*)data,0,(endrow-startrow+1)*81);
    rows=0;
    cols=0;
    while(fgets(data[rows],81,fin)!=NULL && startrow<=endrow)
    {
        num=strlen(data[rows]);
        if(data[rows][num-1]=='\n')
            data[rows][--num]='\0';
        cols=(cols>num)?cols:num;
        rows++;
        startrow++;
    }
    for(j=0; j<cols; j++)
    {
        for(i=rows-1; i>=0; i--)
            printf("%c",data[i][j]);
        printf("\n");
    }
    fclose(fin);        /* 关闭输入文件*/
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。