main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i=0; i<10; i++)
ndigit[i]=0;
while((c=getchar()) != EOF)
if(c>='0' && c<='9')
++ndigit[c-'0'];
else if(c==' ' || c=='\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for(i=0; i<10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
}
这样的索引有什么意义
++ndigit[c-'0'];
与此相反:++ndigit[c];
或者我完全是以错误的方式看待这个问题? 最佳答案
在本例中,当您使用getchar()时,它返回一个int,但带有一个char的值数字“0”到“9”实际上不是以0到9的数字存储的,而是以48到57的数字存储的也就是说“0”与0不同,但实际上与48相同因此,在本例中,假设c是“0”。如果你只是做了ndigts[c],当你想要的是ndigts[0]时,它将与ndigts[48]相同,所以你需要做ndigts[c-'0',它转换成ndigts[48-48],ndigts[0]。。。这就是你想要的!