控制台表格

控制台表格

时间: 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;
}

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

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注