gpt4 book ai didi

c++ - 直方图格式

转载 作者:行者123 更新时间:2023-11-28 02:59:25 24 4
gpt4 key购买 nike

我正在编写一个程序,根据 double 据类型的数组创建水平直方图。我能够让程序显示每个子区间的边界以及正确数量的星号。但是,数据未格式化。

这是程序负责输出的部分:

// endpoints == the boundaries of each sub-interval
// frequency == the number of values which occur in a given sub-interval
for (int i = 0; i < count - 1; i++)
{
cout << setprecision(2) << fixed;
cout << endPoints[i] << " to " << endPoints[i + 1] << ": ";
for (int j = frequency[i]; j > 0; j--)
{
cout << "*";
}
cout << " (" << frequency[i] << ")" << endl;
}

这是我的输出:

0.00 to 3.90: *** (3)
3.90 to 7.80: * (1)
7.80 to 11.70: * (1)
11.70 to 15.60: (0)
15.60 to 19.50: ***** (5)

这是我希望它看起来像的样子:

00.00 to 04.00: *** (3)
04.00 to 08.00: * (1)
08.00 to 12.00: * (1)
12.00 to 16.00: (0)
16.00 to 20.00: ****** (6)

我查阅了 C++ 语法并找到了 setw() 和 setprecision() 之类的东西。我尝试同时使用两者来格式化我的直方图,但无法使其看起来像模型。我希望有人能告诉我我是否在正确的轨道上,如果是这样,如何实现 setw() 和/或 setprecision() 以正确格式化我的直方图。

最佳答案

假设所有数字都在 [0,100) 区间内,您想要的是一系列操纵器,例如:

#include <iostream>
#include <iomanip>

int main() {
std::cout
<< std::setfill('0') << std::setw(5)
<< std::setprecision(2) << std::fixed
<< 2.0
<< std::endl;

return 0;
}

输出:

02.00

这是一个单一的值(value),你可以很容易地调整它以满足你的需要。

例如,您可以将其转换为运算符并像这样使用它:

#include <iostream>
#include <iomanip>

class FixedDouble {
public:
FixedDouble(double v): value(v) {}
const double value;
}

std::ostream & operator<< (std::ostream & stream, const FixedDouble &number) {
stream
<< std::setfill('0') << std::setw(5)
<< std::setprecision(2) << std::fixed
<< number.value
<< std::endl;

return stream;
}

int main() {
//...

for (int i = 0; i < count - 1; i++) {
std::cout
<< FixedDouble(endPoints[i])
<< " to "
<< FixedDouble(endPoints[i + 1])
<< ": ";
}

for (int j = frequency[i]; j > 0; j--) {
std::cout << "*";
}
std::cout << " (" << frequency[i] << ")" << std::endl;

//...
}

关于c++ - 直方图格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com