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

输出:

相关推荐
霁月风13 分钟前
设计模式——适配器模式
c++·适配器模式
萧鼎24 分钟前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸25 分钟前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农25 分钟前
Python 继承、多态、封装、抽象
开发语言·python
^velpro^26 分钟前
数据库连接池的创建
java·开发语言·数据库
秋の花34 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
jrrz082835 分钟前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
小松学前端37 分钟前
第六章 7.0 LinkList
java·开发语言·网络
可峰科技1 小时前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
咖啡里的茶i1 小时前
Vehicle友元Date多态Sedan和Truck
c++