如何在C++终端中并排打印两个表格
实现终端中表格横向并排打印的方法
要解决两个表格纵向排列的问题,核心思路是避免单独打印完整表格,而是按行合并两个表格的内容后逐行输出。具体可以通过拆分“生成表格行”和“打印”的逻辑来实现:
步骤1:重构Table类,分离行生成与打印逻辑
修改Table类,新增get_lines()方法返回表格的所有行字符串(包括分隔线),而不是直接打印。这样可以获取每个表格的行数据,为后续拼接做准备:
class Table: def __init__(self, data): self.data = data # 计算每列的最大宽度,确保表格内部列对齐 self.col_widths = [max(len(str(item)) for item in col) for col in zip(*data)] def get_lines(self): lines = [] # 格式化每行内容 for row in self.data: formatted_row = " | ".join(f"{str(item):<{width}}" for item, width in zip(row, self.col_widths)) lines.append(formatted_row) # 添加表头与内容之间的分隔线(假设第一行为表头) if lines: separator = "-+-".join("-" * w for w in self.col_widths) lines.insert(1, separator) return lines # 保留原有display方法,用于单独打印表格 def display(self): print("\n".join(self.get_lines()))
步骤2:编写并排打印函数
创建一个专门的函数,接收多个Table对象,按行拼接它们的内容并打印:
def display_tables_side_by_side(*tables, gap=4): # 获取每个表格的行列表 table_line_lists = [tbl.get_lines() for tbl in tables] # 找到行数最多的表格,用于补全行数对齐 max_row_count = max(len(lines) for lines in table_line_lists) # 为行数不足的表格补空行,空行长度等于该表格的最大行宽 for idx in range(len(table_line_lists)): lines = table_line_lists[idx] if not lines: continue table_max_width = max(len(line) for line in lines) empty_line = " " * table_max_width # 补空行直到行数等于max_row_count while len(lines) < max_row_count: lines.append(empty_line) # 逐行拼接所有表格的对应行并打印 for row_parts in zip(*table_line_lists): print((" " * gap).join(row_parts))
步骤3:调用示例
在main函数中创建表格对象,调用并排打印函数即可:
if __name__ == "__main__": # 示例表格数据 t1_data = [["Name", "Age"], ["Alice", 25], ["Bob", 30]] t2_data = [["Course", "Score"], ["Math", 90], ["English", 85], ["Physics", 95]] t1 = Table(t1_data) t2 = Table(t2_data) # 横向并排打印两个表格 display_tables_side_by_side(t1, t2, gap=4)
关键逻辑说明
- 分离生成与打印:
get_lines()方法将表格内容转换为可拼接的行字符串,摆脱了原display方法直接打印整表的限制。 - 行对齐处理:通过补空行,保证行数不同的表格也能横向对齐。
- 列宽格式化:提前计算每列的最大宽度,确保表格内部的列对齐,提升可读性。
内容的提问来源于stack exchange,提问作者zogac
相关产品推荐
相关产品推荐

