文件格式变换
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。