首页 > 解决方案 > 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              |                   |                   |
|------------------|-------------------|-------------------|-------------------|-------------------|-------------------|

我尝试了许多替代方法来达到此输出,但最终失败了。

标签: c++

解决方案


你可能会这样做:

    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;
}

演示


推荐阅读