C++在 txt 文件中创建带有测试分数的直方图
C++ creating a histogram with test score in txt file
我是C++新手,我正在尝试创建一个直方图,给定一个具有以下分数的 txt 文件:100、95、47、88、86、92、75、89、81、70、55、80 程序需要做的是显示如下直方图:
00s:
10s:
20s:
30s:
40s:*
50s:
etc...
这是我下面的代码,我遇到的麻烦只是确保 * 进入每个相应的分数百分位数,即 10 秒、20 秒等......
法典:
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
void Print_Hist();
int main() {
double nums;
ifstream data("Test_Score.txt");
if(data.is_open()){
cout << "The file is open" << endl;
}else{
cout << "Check if file exists" << endl;
}
// Declare vector<double> vecx
vector<double> vecx;
// read data from input file to vector vecx,
while(data >> nums)
{
vecx.push_back(nums);
}
for (int i=0; i < vecx.size(); i++){
int num = vecx[i];
if(num < 10){
cout << "*" << endl;
}
else if(num >= 10 && num < 20){
cout << "*" << endl;
}
else if(num >= 20 && num < 30){
cout << "*" << endl;
}
else if(num >= 30 && num < 40){
cout << "*" << endl;
}
else if(num >= 40 && num < 50){
cout << "*" << endl;
}
else if(num >= 50 && num < 60){
cout << "*" << endl;
}
else if(num >= 60 && num < 70){
cout << "*" << endl;
}
else if(num >= 70 && num < 80){
cout << "*" << endl;
}
else if(num >= 80 && num < 90){
cout << "*" << endl;
}
else if(num >= 90 && num < 100){
cout << "*" << endl;
}
else if(num = 100){
cout << "*" << endl;
}
}
}
void Print_Hist(){
cout << "00s: " << endl;
cout << "10s: " << endl;
cout << "20s: " << endl;
cout << "30s: " << endl;
cout << "40s: " << endl;
cout << "50s: " << endl;
cout << "60s: " << endl;
cout << "70s: " << endl;
cout << "80s: " << endl;
cout << "90s: " << endl;
cout << "100: " << endl;
}
我会做这样的事情:
#include <map>
#include <iostream>
using namespace std;
class compare {
public:
bool operator() (int a, int b) {
return a / 10 < b / 10;
}
};
int main() {
map<int, double, compare> histogram;
int values[] = {100, 95, 47, 88, 86, 92, 75, 89, 81, 70, 55, 80};
int count = 0;
for (int i = 0; i < 12; i++) {
histogram[values[i]]++;
count++;
}
for (int i = 0; i <= 100; i+=10) {
cout << i << "s:";
for (int j = 0; j < histogram[i] / count * 10; j++) {
cout << "*" ;
}
cout << endl;
}
return 0;
}
如果文件是空格分隔的,你可以这样做(输入文件名是,你可以猜到是"文件名.txt")
#include <map>
#include <iostream>
#include <fstream>
using namespace std;
class compare {
public:
bool operator() (int a, int b) {
return a / 10 < b / 10;
}
};
int main() {
map<int, double, compare> histogram;
ifstream f("filename.txt");
int count;
while (f) {
int val;
f >> val;
if (!f)
break;
histogram[val]++;
count++;
}
for (int i = 0; i <= 100; i+=10) {
cout << i << "s:";
for (int j = 0; j < histogram[i]; j++) {
cout << "*" ;
}
cout << endl;
}
return 0;
}
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- 用于交叉编译和CMake的预处理器宏的单元测试
- 谷歌测试中的期望值存储在哪里
- 如何在for循环中包含两个索引值的测试条件
- 在cygwin中测试新的boost安装时出现cpp错误
- 使用rdtsc进行基准测试的缺点是什么
- C++在 txt 文件中创建带有测试分数的直方图