控制台表格
时间: 1ms 内存:128M
描述:
画表格
在图形环境中很容易做出漂亮的表格。但在控制台环境中就比较困难了。有的时候可以用一些符号大略地模拟:(word文档中可能不整齐,拷贝到记事本中看)
+-------+------+
|abc |xyz=tt|
+-------+------+
|hellomm|t2 |
+-------+------+本题目要求设计一个程序,把用户输入的内容用这种“准表格”的方式展现出来。
输入:
用户输入的第一行是一个整数,表示接下来有多少行信息。接下来的每行由若干单元组成。单元间用逗号分开。
输出:
程序输出:用表格方式重新展现的输入内容。
示例输入:
3
cat,dog,good-luck
1,2,5
do not use,,that
示例输出:
+----------+---+---------+
|cat |dog|good-luck|
+----------+---+---------+
|1 |2 |5 |
+----------+---+---------+
|do not use| |that |
+----------+---+---------+
提示:
参考答案(内存最优[1092]):
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch[80][80];
int i,j,k;
int m,n;
int t[80]={0};//存储每列最长字符串的长度
scanf("%d",&n);
getchar();
int r;
int key;
int sign=0;//记录表格的列数
for(i=0;i<n;i++)
{
r=0;
sign=0;
gets(ch[i]);
j=0;
while(ch[i][j]!='\0')
{
if(ch[i][j]!=',')
r++;
else
{
if(t[sign]<r)
t[sign]=r;
r=0;
sign++;
}
j++;
}
if(t[sign]<r)
t[sign]=r;
sign++;
}
for(i=0;i<n;i++)
{
for(j=0;j<sign;j++)
{
printf("+");
for(k=0;k<t[j];k++)
printf("-");
}
printf("+\n");
j=0;
r=0;
for(m=0;m<sign;m++)
{
printf("|");
key=0;
while(ch[i][j]!=','&&ch[i][j]!='\0')
{
printf("%c",ch[i][j]);
j++;
key++;
}
for(k=0;k<t[r]-key;k++)
printf(" ");
r++;
j++;
}
printf("|\n");
}
for(j=0;j<sign;j++)//输出表格的最底界
{
printf("+");
for(k=0;k<t[j];k++)
printf("-");
}
printf("+\n");
return 0;
}
参考答案(时间最优[0]):
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
int n; //行
cin>>n;
cin.ignore();
int i,j,k; //循环变量
char a[100][100]; //存放单元格中的二维数组
int len[100][100]; //存放每个字符串长度
int maxlen[100]={0}; //每列最长字符串长度
int many; // 存放每行的块个数
for(i=0;i<n;i++)
{
many=0;
gets(a[i]);
int count=0;
for(j=0;j<strlen(a[i]);j++)
{
if(a[i][j]==',')
{
len[i][many++]=count;
count=0;
}
else
{
count++;
}
}
len[i][many++]=count; //补位
}
for(j=0;j<many;j++)
{
for(i=0;i<n;i++)
{
if(len[i][j]>maxlen[j])
{
maxlen[j]=len[i][j];
}
}
}
for(i=0;i<n;i++)
{
for(k=0;k<many;k++) //每一行上边的上边框
{
cout<<'+';
for(j=0;j<maxlen[k];j++)
cout<<'-';
}
cout<<'+'<<endl;
int COUNT=0;
for(j=0;j<many;j++) //数据
{
cout<<'|';
while(a[i][COUNT]!=','&&COUNT<strlen(a[i]))
{
cout<<a[i][COUNT];
COUNT++;
}
COUNT++;
for(k=0;k<maxlen[j]-len[i][j];k++)
cout<<' ';
}
cout<<'|'<<endl;
}
for(k=0;k<many;k++) //下边框
{
cout<<'+';
for(j=0;j<maxlen[k];j++)
cout<<'-';
}
cout<<'+'<<endl;
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。