表格

题目描述

用户输入一个表格的文本,请按如下格式输出:

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 p[22][22][22] = {0};
int maxlen[22]  ={0};
int vis[22] = {0};
int lenarr[22][22]  ={0};
void prfplus(){printf("+");
}
void prfjian(int len){prfplus();for(int i = 0;i<len;i++)printf("-");
}
void prfshu(){printf("|");
}
void prfspace(int len){//for(int i = 0;i<len;i++)printf(" ");
}
void prfmap(int c){//i是第几行上面的线,c是有多少列for(int  j = 0;j<c;j++){//j是第几列prfjian(maxlen[j]+2);//打印减号同时打印加号}prfplus();//补齐末尾加号
}int main(){int t;scanf("%d",&t);while(t--){memset(p,0,sizeof(p));memset(maxlen,0,sizeof(maxlen));memset(vis,0,sizeof(vis));memset(lenarr,0,sizeof(lenarr));//这道题的我半天不过的原因就是没有初始化int r,c;char ch;scanf("%d %d",&r,&c);getchar();//这里加getchar()就没有问题for(int i = 0;i<c;i++){//getchar();这里加getchar()也会有问题//之后会退不出输入程序scanf("%c",&ch);if(ch=='l'){vis[i] = 1;//为什么此时i变为1了?,一定记得在前面加getchar();//是不是跳过了i=0的情况}//某一列的对齐情况if(ch=='c'){vis[i] = 2;}if(ch=='r'){vis[i] = 3;}}//每一列的对齐情况for(int i = 0;i<r;i++){for(int j = 0;j<c;j++){scanf("%s",p[i][j]);//这里为什么可以用%s可以呢//而不用那种可以输入带空格的字符串//注意我们这里是三维数组//第三个空代表一个单词,输入单词按空格后就代表//这一个单词输入完了int len = strlen(p[i][j]);lenarr[i][j] = len;//储存每个字符的长度if(len>=maxlen[j]){maxlen[j] = len;}}}for(int i = 0;i<r;i++){prfmap(c);//打印前面的线printf("\n");for(int j  = 0;j<c;j++){prfshu();//打印竖线if(vis[j]==1){int left = 1;prfspace(left);for(int k = 0;k<lenarr[i][j];k++){printf("%c",p[i][j][k]);}int right = maxlen[j]+2-left-lenarr[i][j];prfspace(right);}if(vis[j]==2){//根据字符长度和最大长度来确定空格    int left = (maxlen[j]+2-lenarr[i][j])/2;//利用c语言向下取整的性质满足题意;prfspace(left);for(int k = 0;k<lenarr[i][j];k++){printf("%c",p[i][j][k]);}int right = maxlen[j]+2-lenarr[i][j]-left;prfspace(right);}if(vis[j]==3){int right = 1;int left = maxlen[j]+2-lenarr[i][j]-right;prfspace(left);for(int k = 0;k<lenarr[i][j];k++){printf("%c",p[i][j][k]);}prfspace(right);}}prfshu();printf("\n");}prfmap(c);printf("\n");}
}

XTU OJ 1381表格相关推荐

  1. XTU OJ 1324 Hash

    XTU OJ 1324 Hash Hash 题目描述 H a s h Hash Hash是一种很常用的数据结构,Hash技术的关键在于Hash函数的选取. 一种常用整数的 H a s h Hash H ...

  2. XTU OJ 1375 Fibonacci

    XTU OJ 1375 Fibonacci 题目描述 小明非常喜欢FibonacciFibonacciFibonacci数列,数列为 f1=1,f2=2,fn=fn−1+fn−2f_1=1,f_2=2 ...

  3. XTU OJ 1355 Euler‘s Totient Function(欧拉函数)

    XTU OJ 1355 Euler's Totient Function(欧拉函数) 题目描述 对于整数n,定义ϕ(n)ϕ(n)ϕ(n)为小于或等于n,并与n互质的整数的个数,比如6,比它小的和它互质 ...

  4. 质因数分解唯一定理(XTU OJ)

    今年的oj 很有几道题用到了,这里介绍一下 质因数分解(唯一分解定理) 基本概念: 每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数. 分解质因数只针对合 ...

  5. XTU Oj 128

    Rotate 题目描述 一个4×4的矩阵,我们可以把矩阵看成内外两圈,我们可以把外圈按顺时钟或者逆时钟转动,每次转动90度. 我们想得到一个2×2的子矩阵,使得这个子矩阵4个元素的累加和最大.请问最大 ...

  6. XTU OJ 1359 字符频度

    淦啊,好久不写memset都忘记怎么写了,调了半天QAQ #include<stdio.h> #include<string.h> char a[1005]; int alp[ ...

  7. xtu oj 1375斐波纳契

    题目描述 小明非常喜欢斐波纳契数列,数列为f1=1,f2=2,fn=fn−1+fn−2.小明想知道对于一个整数n,使得n=fi+fj+fk的组合有多少种?比如5=1+1+3或者5=1+2+2,有2种. ...

  8. 【算法学习笔记】64. 枚举法 SJTU OJ 1381 畅畅的牙签

    枚举法就好了,推理很麻烦,感觉也做不出来. 创造一个结构体,一个是真实的数,一个是花费的牙签数. 构建一位数,两位数,三位数即可. #include <iostream> #include ...

  9. XTU—OJ 1258矩阵

    矩阵 题目描述 编写一个程序,将1~n2按行依次填入n×n的矩阵,执行若干条行或者列的循环移动的指令,再将数字按行依次取出. 指令如下: 指令 含义 L x y x行循环左移y次 R x y x行循环 ...

最新文章

  1. 5.15 pymysql 模块
  2. java 10新_【Java基础】Java10 新特性
  3. Spring MVC 环境搭建(一)
  4. Redis在持久化时产生的延迟
  5. 数据采集工具flume
  6. matplotlib的colorbar自定义刻度范围
  7. Java基础学习总结(118)——单元测试的必要性和重要性
  8. Flutter基础—常用控件之容器
  9. node-amqp 使用fanout发布订阅rabbitmq消息
  10. $bzoj1079-SCOI2008$ 着色方案 $dp$
  11. 决策树系列(一)——基础知识回顾与总结
  12. jQuery使用规范总结
  13. PPT怎么切换不同的母版
  14. 1024网易程序员节,最上头的爱,给最好的你!
  15. cf1111d(退背包)
  16. MySql报1205:1205 - Lock wait timeout exceeded; try restarting transaction,出现1205如何解决
  17. git分支合并、撤销;git修改已push的commit信息; git 撤销操作;
  18. spss菜单小介绍【跟阿婷一起学spss 03 在入坑边缘疯狂试探】
  19. 360浏览器模拟百度搜索引擎蜘蛛访问
  20. 深入浅出的分析 TreeMap

热门文章

  1. 老婆问我Spring Boot怎么学
  2. java-网络文件下载器
  3. php网站老掉线,电脑网络不稳定老掉线的两种解决方法
  4. 2021年焊工(技师)考试技巧及焊工(技师)模拟考试题库
  5. python 实现ssh爆破
  6. MAMP PRO for Mac 使用说明
  7. Java鼠标自动点击及文件内容读取复制
  8. W3Shool学习 - 初级教程
  9. 蜂鸣器干扰通讯_传输电路中的抗干扰问题及其措施
  10. 失望苦闷 喝一杯乌龙茶