You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现printf垂直输出?字符统计结果垂直打印技巧求助

字母统计结果的垂直柱状输出实现方案

你现有代码实现了读取输入并统计每个字母出现次数的功能,但使用了26个单独变量,后续输出垂直柱状图可以按以下思路优化并实现:

原始代码

#include <stdio.h>
#include <ctype.h>

int main()
{
    int c1;
    int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0, q=0, r=0, s=0, t=0, u=0, v=0, w=0, x=0 , y=0, z=0;

    while (( c1=getchar()) != EOF)
        if (isalpha(tolower(c1)) != 0) {

            if (tolower(c1) == 97) {  // Character = 'a'
                a += 1;
            }

            else if (tolower(c1) == 98) { // Character = 'b'
                b += 1;
            }

            else if (tolower(c1) == 99) { // Character = 'c'
                c += 1;
            }

            .
            .
            .

        }
    return 0;
}

需求说明

将统计结果以垂直柱状图形式输出,例如输入ABC---Ddhhh时,输出:

*
   *   *
****   *
abcdefghijklmnopqrstuvwxyz

实现思路

  • 优化计数存储:用长度为26的数组替代26个单独变量,索引0对应字母a,25对应z,统计时通过tolower(c1) - 'a'直接获取索引,简化代码逻辑。
  • 确定最大计数:遍历计数数组找到最大值,这是垂直柱状图的最高行数。
  • 逐行绘制柱状图:从最高行到第1行依次遍历,对每个字母的计数,若当前行高度小于等于该字母的计数则输出*,否则输出空格,保证每列对齐。
  • 输出底部字母行:最后输出连续的a-z字符串,作为柱状图的横轴标签。

修改后的完整代码

#include <stdio.h>
#include <ctype.h>

int main()
{
    int c1;
    int counts[26] = {0}; // 数组存储每个字母的计数,索引0对应a,25对应z

    // 读取输入并统计字母出现次数
    while ((c1 = getchar()) != EOF) {
        if (isalpha(c1)) {
            int index = tolower(c1) - 'a'; // 转换为小写后计算索引
            counts[index]++;
        }
    }

    // 找到最大计数,确定柱状图的最高行数
    int max_count = 0;
    for (int i = 0; i < 26; i++) {
        if (counts[i] > max_count) {
            max_count = counts[i];
        }
    }

    // 逐行输出柱状图
    for (int row = max_count; row > 0; row--) {
        for (int i = 0; i < 26; i++) {
            printf(counts[i] >= row ? "*" : " ");
        }
        printf("\n");
    }

    // 输出底部的字母行
    for (int i = 0; i < 26; i++) {
        printf("%c", 'a' + i);
    }
    printf("\n");

    return 0;
}

代码说明

  1. 计数优化:数组counts替代零散变量,避免大量if-else判断,代码更简洁易维护。
  2. 最大计数获取:遍历数组找到最高柱子的高度,确保垂直输出能覆盖所有统计结果。
  3. 垂直输出逻辑:从最高行开始逐行绘制,通过判断计数与行号的关系输出星号或空格,实现垂直柱状效果。
  4. 字母行输出:通过循环生成a-z字符串,与柱状图每列严格对齐。

内容的提问来源于stack exchange,提问作者user19159910

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:35:26