问题说明了一切:
...
int ndigit[10];
...//fill in the array with 0s
while((c = getchar()) != EOF)
if(c >= '0' && c <= '9')
++ndigit[c - '0']; //<== unable to understand this part
Run Code Online (Sandbox Code Playgroud)
据推测,该数组存储来自输入流的输入数字字符...
Pil*_*lsy 12
在C中,您可以使用字符代码对字符进行算术运算.因此,这确保您有一个数字,找出它是哪个数字(通过测量它与零的差异),然后增加数组中相应位置的计数.完成后,ndigit[0]
将包含出现的次数'0'
,ndigit[1]
将包含出现的次数'1'
,等等.
它正在创建字符0-9的直方图."c-'0'"将getchar()中的值转换为整数,该整数充当数组的索引.该索引对应于数字0-9.然后它增加该阵列位置.因此,一旦完成运行,该数组包含字符0-9的重复.
因此0123456789应该生成所有的数组.0123333应该生成一个值为1114000000的数组.