我读了这个程序,但我无法理解它。请解释 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/