C 中的字符频率直方图

标签 c character histogram

我读了这个程序,但我无法理解它。请解释 length[] 数组中到底发生了什么。如何使用它来存储不同类型的字符,即数字和字符。以下是代码:

#include <stdio.h>
#define EOL '\n'
#define ARYLEN 256
main()
{
    int c, i, x;
    int length[ARYLEN];
    for(x = 0; x < ARYLEN;x++)
        length[x] = 0;
    while( (c = getchar() ) != EOL)
     {
        length[c]++;
    if (c == EOL)
        break;
    }    
    for(x = 0; x < ARYLEN; x++)
    {
         if( length[x] > 0){
            printf("%c | ", x);
            for(i = 1; i <= length[x]; ++i){
                printf("*");
         }
         printf("\n");
         }
     }
}

最佳答案

该数组不存储任何字符(至少在概念上)。它存储程序在索引 c 的数组位置中遇到数值为 c 的字符的次数。

基本上,在 C 编程语言中,char 是一种由 8 位组成的数据类型,能够保存 unsigned char 0 到 255 范围内的值> 或 -128 到 127(对于有符号字符)。
然后,程序定义一个足够大的数组,以容纳尽可能多的不同值,可以使用 char 表示,每个唯一值对应一个数组位置。 然后,它使用适当的数组位置 length[c] 作为该特定值的计数器来计算出现次数。当它循环遍历数组来打印数据时,只需查看循环内的当前索引就可以判断数据属于哪个字符,因此 printf("%c | ", x); 是字符,而 length[x] 是我们要查找的数据。

关于C 中的字符频率直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16891819/

相关文章:

c函数指针和用户定义的函数标识符冲突

C - 在换行符中写入纯文本文件结构变量

c - 有没有办法在读取文本文件后删除第一个字符?

r - 尝试平衡 grid.arrange 和arrangeGrob 中图的底部。还尝试移动 Y 轴标签

linux - 在 gnuplot 中绘制多个图形的脚本

c - ASM 中舍入函数的最后一段

java - Java URL 中的中文字符

html - HTML 中的公告字符是什么?

python - Numpy 直方图数据 : Why is the length of bins vector longer than the histogram values vector?

c - 尝试释放时指针地址无效