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

输出:

相关推荐
java1234_小锋5 分钟前
什么是Java三高架构?
java·开发语言·架构
如竟没有火炬15 分钟前
全排列——交换的思想
开发语言·数据结构·python·算法·leetcode·深度优先
嵌入式小李.man28 分钟前
C++第十三篇:继承
开发语言·c++
Bryce李小白35 分钟前
Kotlin Flow 的使用
android·开发语言·kotlin
jarreyer1 小时前
python离线包安装方法总结
开发语言·python
李辰洋1 小时前
go tools安装
开发语言·后端·golang
wanfeng_091 小时前
go lang
开发语言·后端·golang
绛洞花主敏明1 小时前
go build -tags的其他用法
开发语言·后端·golang
ByteCraze1 小时前
秋招被问到的常见问题
开发语言·javascript·原型模式
码银1 小时前
【python】基于 生活方式与健康数据预测数据集(Lifestyle and Health Risk Prediction)的可视化练习,附数据集源文件。
开发语言·python·生活