LQ0261 画表格文本处理

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0261 画表格文本处理相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2011初赛

题目描述
在图形环境中很容易做出漂亮的表格。但在控制台环境中就比较困难了。有的时候可以用一些符号大略地模拟:

+-------+------+
|abc |xyz=tt|
+-------+------+
|hellomm|t2 |
+-------+------+

本题目要求设计一个程序,把用户输入的内容用这种"准表格"的方式展现出来。

输入描述

用户输入的第一行是一个整数,表示接下来有多少行信息。接下来的每行由若干单元组成。单元间用逗号分开。

用户输入的最大行数为 30,可能的最多列数为 40。

输出描述
用表格方式重新展现的输入内容。

输入输出样例
示例
输入

3
cat,dog,good-luck
1,2,5
do not use,,that

输出

+----------+---+---------+
|cat |dog|good-luck|
+----------+---+---------+
|1 |2 |5 |
+----------+---+---------+
|do not use| |that |
+----------+---+---------+

样例说明:

从中不难看出:

两个连续的逗号表示中间有一个内容为空的单元;

列的数目由最大的单元数的那行决定;

列的宽度由同列的最宽的单元决定;

单元格中的信息左对齐。

问题分析
文本处理问题,不解释。

AC的C++语言程序如下:

/* LQ0261 画表格 */

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;

const int N = 30;
const int M = 40;
string s, g[N][M];
int maxcol, maxl[M];

void line()

    putchar('+');
    for (int i = 0; i < maxcol; i++) 
        for (int j = 1; j <= maxl[i]; j++)
            putchar('-');
        putchar('+');
    
    putchar('\\n');


int main()

    getline(cin, s);
    int n = atoi(s.c_str());

    maxcol = 0;
    memset(maxl, 0, sizeof maxl);
    for (int i = 1; i <= n; i++) 
        getline(cin, s);

        int cnt = count(s.begin(), s.end(), ',');
        maxcol = max(maxcol, cnt + 1);

        for (int j = 0, k = 0; s[j]; j++) 
            string t;
            while (s[j] != ',' && s[j])
                t += s[j++];
            maxl[k] = max(maxl[k], (int)t.size());
            g[i][k++] = t;
        
    

    line();
    for (int i = 1; i <= n; i++) 
        putchar('|');
        for (int j = 0; j < maxcol; j++) 
            printf("%s", g[i][j].c_str());
            if (g[i][j].size() < maxl[j]) putchar(' ');
            putchar('|');
        
        putchar('\\n');
        line();
    

    return 0;

以上是关于LQ0261 画表格文本处理的主要内容,如果未能解决你的问题,请参考以下文章

LQ0255 串的处理文本处理

LQ0255 串的处理文本处理

LQ0128 贪吃蛇长度文本处理

LQ0100 人物相关性分析文本处理

LQ0045 煤球数目迭代

LQ0021 奖券数目组合+枚举