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]。。。这就是你想要的!

10-08 15:11