我读了这个程序,但我无法理解它。请解释length[]
arraay究竟发生了什么。它如何用于存储不同类型的字符,即数字和数字。 chars.Following是代码:
#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");
}
}
}
答案 0 :(得分:2)
数组不存储任何字符(至少在概念上)。它存储程序在索引c
的数组位置遇到具有数值c
的字符的次数。
基本上,在C编程语言中,char
是一个由8位组成的数据类型,能够保存unsigned char
或-128到127的0到255范围内的值。 a signed char
。
然后,程序定义一个足够大的数组,以容纳尽可能多的不同值,使用char
表示每个唯一值的一个数组位置。
然后,它使用适当的数组位置length[c]
计算出现次数,作为该特定值的计数器。当它循环遍历数组以打印出数据时,它可以通过查看循环内的当前索引来判断数据属于哪个字符,因此printf("%c | ", x);
是字符,而length[x]
是数据我们正在追求。
答案 1 :(得分:1)
在您的代码中,整数数组length[]
不用于存储字符。它仅用于存储键入的每个字符的计数。将字符逐个读入字符变量c
while( (c = getchar() ) != EOL)
。
但棘手的部分是length[c]++;
。每个字符的计数保持在与ASCII value - 1
数组中的length[]
相等的位置。
例如,在使用ASCII
代码的系统中,length[64]
包含A
的计数,因为65
是ASCII
的{{1}}代码}。
A
包含length[65]
的计数,因为B
是66
的{{1}}代码。
ASCII-8
包含B
的计数,因为length[96]
是a
的{{1}}代码。
97
包含ASCII
的计数,因为a
是length[47]
的{{1}}代码。