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 画表格文本处理的主要内容,如果未能解决你的问题,请参考以下文章