C ++在控制台中将数据显示为图形

时间:2018-12-21 12:59:33

标签: console console-application

我想在控制台上以非常普通的方式将一些值显示为图形。我当前的输出看起来像这样:

                    9=========
                    2==
3===
8========
8========
                    3===
                    10==========
                    19===================
                    20====================
                    8========
                    0
7=======
3===
3===
3===

左侧的所有值均为负值,中间的右侧的所有值为正值。这些数字也应全部粘贴在左侧。我希望最终结果看起来像这样:

9                    =========
2                    ==
-3                ===
-8           ========
-8           ========
3                     ===
10                    ==========
19                    ===================
20                    ====================
8                     ========
0                    
-7            =======
-3                ===
-3                ===
-3                ===

您认为实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用set::setw输出恒定宽度的元素,并使用std::string构造函数构造重复的字符串'='。像这样:

#include <iostream>
#include <iomanip>
#include <vector>

void graph(const std::vector<int>& vec)
{
    for (const auto& elem : vec)
    {
        std::cout << std::setw(3) << elem;

        const auto bar = std::string(std::abs(elem), '=');
        if (elem < 0)
        {
            std::cout << std::setw(25) << bar;
        }
        else if (elem > 0)
        {
            std::cout << std::string(25, ' ') << bar;
        }
        std::cout << "\n";
    }
}

int main()
{
    std::vector<int> v = {9, -1, 0, 4, 3, 18, 1, -2};
    graph(v);
}

输出:

  9                         =========
 -1                        =
  0
  4                         ====
  3                         ===
 18                         ==================
  1                         =
 -2                       ==