C/C++:实现一个柱状统计图

C/C++:实现一个柱状统计图

如果想要实现一个柱状统计图,其实有两点需要考虑:

  • 数据的存储方式
  • 数据的收集
  • 数据的显示

我们以统计字符的个数为例子,进行说明。

首先是数据的存储方式,怎么存储最好呢?

C++的STL中有一个模板叫做map,就非常适合做数据收集的工作,我们进行如下定义:

c 复制代码
map<char, int> mp;

char表示字符类型,int表示字符的个数。

看起来一点也不难!!

如何对数据进行收集呢?

我们可以使用 getchar() 说实话,我觉得这个函数是最适合计算机的输入方式!读取方式很好控制!

c 复制代码
while((temp = getchar()) != EOF) {
    if(temp <= 'Z' && temp >= 'A') {
        mp[temp]++;
        maxn = max(maxn, mp[temp]);
    }
}

最后,就是数据的显示了,这也是最值得思考的地方,我记录了一个变量nmax,表示所有数据中,数量最大的数据,也就是表示了个数最多的字符(柱子最高)。这样我们可以便于我们动态显示柱状统计图的大小和高度。

代码如下:

c 复制代码
#include <bits/stdc++.h>
using namespace std;
map<char, int> mp;
int maxn;
int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    char temp;
    while((temp = getchar()) != EOF) {
        if(temp <= 'Z' && temp >= 'A') {
            mp[temp]++;
            maxn = max(maxn, mp[temp]);
        }
    }
    for (int i = 1; i <= maxn; i++) {
        for (char j = 'A'; j <= 'Z'; ++j) {
            if (mp[j] >= maxn - i + 1) {
                cout << "*";
            } else {
                cout << ' ';
            }
            if(j != 'Z') cout << ' ';
        }
        cout << '\n';
    }
    for (char i = 'A'; i <= 'Z'; ++i) {
        cout << i;
        if(i != 'Z') cout << ' ';
    }
    cout << endl;
    return 0;
}

运行效果如下:

输入:

txt 复制代码
AAAAAAAAAAjadlnkdaaSSSZSVCRVEHFHFBGH
XASXAXASXW NHNMUYGRBERBV fw EFWE E W E
#^HGT%%&$&^$HFGB>?HM>UJ:ACEACDACAE"F:"
1264131321f1ceqcECQE
cqc 4ef4qr54c4 q3 tyjruy45
BB

输出:

相关推荐
叼烟扛炮32 分钟前
C++ 知识点08 类与对象
开发语言·c++·算法·类和对象
楼田莉子36 分钟前
仿Muduo的高并发服务器:Http协议模块
linux·服务器·c++·后端·学习
你不是我我7 小时前
【Java 开发日记】HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·开发语言·微服务
tjl521314_217 小时前
04C++ 名称空间(Namespace)
开发语言·c++
ximu_polaris7 小时前
设计模式(C++)-行为型模式-备忘录模式
c++·设计模式·备忘录模式
赏金术士8 小时前
Kotlin 数据流与单双向绑定
android·开发语言·kotlin
逻辑驱动的ken8 小时前
Java高频面试场景题25
java·开发语言·深度学习·面试·职场和发展
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题】【Java基础篇】第32题:Java的异常处理机制是什么
java·开发语言·后端·面试
wdfk_prog10 小时前
正常关闭虚拟机时,不要点“关机”,而要点“关闭客户机”
linux·c语言·网络·ide·vscode
無限進步D11 小时前
Java 面向对象高级 接口
java·开发语言