表格
题目描述
用户输入一个表格的文本,请按如下格式输出:
1. 用'-'表示横线,'|'表示竖线,'+'表示横竖线的交点 2. 列宽为当前列最长字符串长度+2 3. 每列的对齐方式相同,一共有三种,分别为靠左对齐,居中对齐,靠右对齐,分别用'l','c','r'表示。 a. 靠左对齐,字符串左端距离边线1个空格; b. 居中对齐,字符串距离边线左和右空格数的差不超过1,且左边空格数小于等于右边空格数。 c. 靠右对齐,字符串右端距离边线1个空格;
输入
第一行是一个整数T(1≤T≤100) , 表示样例的个数。
每个样例的第1行是两个整数r,c(1≤r,c≤10),表示表格的行和列数。
第2行是c个字符,字符只由'l','c','r'三种组成,依次表示对应列的对齐方式。
以后的r行,每行c个字符串,表示对应行列的单元格内容,字符串只含英文字母,数字,长度不超过20个字符。
输出
按格式依次输出每个样例的的结果。
样例输入
1 3 5 lcccr Name English Math Chinese Total Alice 100 85 75 260 Bob 85 100 85 270
样例输出
+-------+---------+------+---------+-------+ | Name | English | Math | Chinese | Total | +-------+---------+------+---------+-------+ | Alice | 100 | 85 | 75 | 260 | +-------+---------+------+---------+-------+ | Bob | 85 | 100 | 85 | 270 | +-------+---------+------+---------+-------+
#include<stdio.h> #include <string.h> char a[20][20][20]; int main() { int t,l1,l2,w; scanf("%d",&t); while(t--){ int m,n; scanf("%d %d",&m,&n); char s[11]={0}; scanf("%s",s); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ scanf("%s",a[i][j]); } } int d[20]={0}; for(int j=0;j<n;j++){ for(int i=0;i<m;i++){ if(strlen(a[i][j])>d[j]) d[j]=strlen(a[i][j]); } d[j]+=2; } for(int i=0;i<m;i++){ if(i==0){ printf("+"); for(int k=0;k<n;k++){ w=d[k]; while(w--){ printf("-"); } printf("+"); } printf("\n"); } printf("|"); for(int j=0;j<n;j++){ if(s[j]=='l'){ l1=d[j]-strlen(a[i][j])-1; printf(" %s",a[i][j]); while(l1--){ printf(" "); } printf("|"); } if(s[j]=='c'){ l1=(d[j]-strlen(a[i][j]))/2; l2=d[j]-l1-strlen(a[i][j]); while(l1--){ printf(" "); } printf("%s",a[i][j]); while(l2--){ printf(" "); } printf("|"); } if(s[j]=='r'){ l1=d[j]-strlen(a[i][j])-1; while(l1--){ printf(" "); } printf("%s ",a[i][j]); printf("|"); } } printf("\n"); printf("+"); for(int k=0;k<n;k++){ w=d[k]; while(w--){ printf("-"); } printf("+"); } printf("\n"); } } return 0; }