• XTU OJ 1381表格


    表格

    题目描述

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

    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 |
    +-------+---------+------+---------+-------+

    最近在优化以前写的代码,发现曾经做过的题再写一次也还是会有不少问题。。。 

    回到这道题上来,这道题核心就是拿一个开一个三维数组来存单词

    其他打印表格部分用函数来控制。这道题我重新优化做了一次后竟然犯了以前没犯的错,忘记初始化了,卡了一段时间。。

    1. #include
    2. #include
    3. char p[22][22][22] = {0};
    4. int maxlen[22] ={0};
    5. int vis[22] = {0};
    6. int lenarr[22][22] ={0};
    7. void prfplus(){
    8. printf("+");
    9. }
    10. void prfjian(int len){
    11. prfplus();
    12. for(int i = 0;i
    13. printf("-");
    14. }
    15. void prfshu(){
    16. printf("|");
    17. }
    18. void prfspace(int len){//
    19. for(int i = 0;i
    20. printf(" ");
    21. }
    22. void prfmap(int c){//i是第几行上面的线,c是有多少列
    23. for(int j = 0;j//j是第几列
    24. prfjian(maxlen[j]+2);//打印减号同时打印加号
    25. }
    26. prfplus();//补齐末尾加号
    27. }
    28. int main(){
    29. int t;
    30. scanf("%d",&t);
    31. while(t--){
    32. memset(p,0,sizeof(p));
    33. memset(maxlen,0,sizeof(maxlen));
    34. memset(vis,0,sizeof(vis));
    35. memset(lenarr,0,sizeof(lenarr));
    36. //这道题的我半天不过的原因就是没有初始化
    37. int r,c;
    38. char ch;
    39. scanf("%d %d",&r,&c);
    40. getchar();//这里加getchar()就没有问题
    41. for(int i = 0;i
    42. //getchar();这里加getchar()也会有问题
    43. //之后会退不出输入程序
    44. scanf("%c",&ch);
    45. if(ch=='l'){
    46. vis[i] = 1;//为什么此时i变为1了?,一定记得在前面加getchar();
    47. //是不是跳过了i=0的情况
    48. }//某一列的对齐情况
    49. if(ch=='c'){
    50. vis[i] = 2;
    51. }
    52. if(ch=='r'){
    53. vis[i] = 3;
    54. }
    55. }
    56. //每一列的对齐情况
    57. for(int i = 0;i
    58. for(int j = 0;j
    59. scanf("%s",p[i][j]);//这里为什么可以用%s可以呢
    60. //而不用那种可以输入带空格的字符串
    61. //注意我们这里是三维数组
    62. //第三个空代表一个单词,输入单词按空格后就代表
    63. //这一个单词输入完了
    64. int len = strlen(p[i][j]);
    65. lenarr[i][j] = len;//储存每个字符的长度
    66. if(len>=maxlen[j]){
    67. maxlen[j] = len;
    68. }
    69. }
    70. }
    71. for(int i = 0;i
    72. prfmap(c);//打印前面的线
    73. printf("\n");
    74. for(int j = 0;j
    75. prfshu();//打印竖线
    76. if(vis[j]==1){
    77. int left = 1;
    78. prfspace(left);
    79. for(int k = 0;k
    80. printf("%c",p[i][j][k]);
    81. }
    82. int right = maxlen[j]+2-left-lenarr[i][j];
    83. prfspace(right);
    84. }
    85. if(vis[j]==2){
    86. //根据字符长度和最大长度来确定空格
    87. int left = (maxlen[j]+2-lenarr[i][j])/2;
    88. //利用c语言向下取整的性质满足题意;
    89. prfspace(left);
    90. for(int k = 0;k
    91. printf("%c",p[i][j][k]);
    92. }
    93. int right = maxlen[j]+2-lenarr[i][j]-left;
    94. prfspace(right);
    95. }
    96. if(vis[j]==3){
    97. int right = 1;
    98. int left = maxlen[j]+2-lenarr[i][j]-right;
    99. prfspace(left);
    100. for(int k = 0;k
    101. printf("%c",p[i][j][k]);
    102. }
    103. prfspace(right);
    104. }
    105. }
    106. prfshu();
    107. printf("\n");
    108. }
    109. prfmap(c);
    110. printf("\n");
    111. }
    112. }

     

     

  • 相关阅读:
    DOM与BOM与Echarts
    Vue项目实战——【基于 Vue3.x + NodeJS】实现的课程表排课系统三(duration-title)
    实验1 熟悉R语言环境
    性能测试工具---jmeter讲解
    gmssl 在Windows下的编译注意事项
    中国服装自主品牌行业市场环境与投资趋势分析报告
    Linux,虚拟机
    Git的使用教程
    sftp传输文件
    [附源码]java毕业设计基于web的建筑合同管理系统
  • 原文地址:https://blog.csdn.net/qq_24917263/article/details/128064504