c++ - C++:格式化表格的输出
问题描述
我正在尝试为我的输出制作一个表格,但我有点卡在我不知道如何处理它的部分。这是我下面的程序:
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
vector<vector<string>> myVector;
for (int i = 0; i < 7; i++)
{
vector<string> temp;
for (int j = 0; j < 6; j++)
{
temp.push_back("");
}
myVector.push_back(temp);
}
myVector[1][1] = "test1";
myVector[6][3] = "test2";
for (int i = 0; i < myVector.size(); i++)
{
for (int j = 0; j < myVector[i].size(); j++)
{
if (myVector[i][j] == "")
{
cout << setfill(' ') << setw(20) << "|";
}
else
{
cout << myVector[i][j] << setfill(' ') << setw(20 - myVector[i][j].length()) << "|";
}
}
cout << "\n|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|" << endl;
}
return 0;
}
我基本上想做的是创建某种时间表,我可以在其中放入数据。我设法做了一部分。
这就是我的输出
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
|test1 | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | |test2 | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
正如你所看到的,当我myVector[6][3] = "test2"
将数据分配到那个单元格时。我现在面临的问题是扩大桌子时。例如,如果我想分配另一个向量变量"myVector1"
并写,myVector1[6][3]="test3"
我想让他也去同一个单元格,但在第二行。所以预期的输出是:
| | | | | |
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
|test1 | | | | |
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | | | | |
| | | | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
| | |test2 | | |
| | |test3 | | |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|
我尝试了许多替代方法来达到此输出,但最终失败了。
解决方案
你可能会这样做:
std::vector<std::vector<std::string>> myVector(7, std::vector<std::string>(6));
std::vector<std::vector<std::string>> myVector1(7, std::vector<std::string>(6));
myVector[1][1] = "test1";
myVector[6][3] = "test2";
myVector1[6][3] = "test3";
for (std::size_t i = 0; i != myVector.size(); i++)
{
for (std::size_t j = 0; j != myVector[i].size(); j++)
{
std::cout << myVector[i][j] << std::setfill(' ') << std::setw(20 - myVector[i][j].length()) << "|";
}
std::cout << "\n";
for (std::size_t j = 0; j != myVector1[i].size(); j++)
{
std::cout << myVector1[i][j] << std::setfill(' ') << std::setw(20 - myVector1[i][j].length()) << "|";
}
std::cout << "\n";
std::cout << "|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|" << std::endl;
}
我什至建议为您的内部循环创建子函数:
auto print_line = [](const auto& line){
for (const auto& word : line)
{
std::cout << word << std::setfill(' ') << std::setw(20 - word.length()) << "|";
}
std::cout << "\n";
};
for (std::size_t i = 0; i != myVector.size(); i++)
{
print_line(myVector[i]);
print_line(myVector1[i]);
std::cout << "|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|" << std::endl;
}
推荐阅读
- html - 如何防止在vue js的输入字段中粘贴字符“e”
- r - 尝试在雪花中使用 dplyr Complete() 函数
- python - 一个情节,不同的xlim。怎么解决?
- highcharts - HIGHCHARTS 为自定义定位标签自动旋转 x 轴标签
- go - 如何在 Visual Studio Code 中使用 Cgo 调试 Go
- mysql - 在presto MySQL中将时间戳转换为字符串?
- apache-spark - spark 3.2.0 与 2.4.8 中的结构化流检查点位置
- telegram - 如何将照片转发给作为机器人 Telethon 电报登录的用户
- python - 使用烧瓶会话查询仅获取单个字段数据
- r - 从单个数据库中以 R 降价创建个人(逐行/每个参与者)pdf 报告