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

输出:

相关推荐
basketball616几秒前
Golang:基本输入输出使用方法总结
开发语言·golang·xcode
Shingmc37 分钟前
【Linux】多路转接之epoll
linux·运维·服务器·开发语言·网络
utf8mb4安全女神14 分钟前
⽇志管理与深层防⽕墙
java·开发语言·spring boot
John_ToDebug15 分钟前
Chromium Settings 自启动开关:三种 pref 同步方案深度对比
c++·chrome·ai
Mr.Lu ‍17 分钟前
QT调试查看QT内部数据时显示无可用信息,未为 Qt5Cored.dll 加载任何符号
开发语言·qt
qq_4523962319 分钟前
第九篇:《Dockerfile 指令精讲(二):WORKDIR、ENV、ARG、EXPOSE》
java·开发语言·docker
JAVA社区21 分钟前
Java高级全套教程(九)—— SpringCloud超详细实战详解
java·开发语言·后端·spring cloud·面试·职场和发展
还在点灯@22 分钟前
基于visual studio的MFC上位机实现界面切换
c++·visualstudio·mfc
wyjcxyyy23 分钟前
java反序列化-cc1链
java·c语言·开发语言
山上三树23 分钟前
Python 高频报错速查表(开发通用版)
开发语言·python