我想在控制台上以非常普通的方式将一些值显示为图形。我当前的输出看起来像这样:
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 ===
您认为实现此目标的最佳方法是什么?
答案 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 ==