声明ndigit[c-'0']
的作用是什么?
我正在使用ansi c。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int c, i, ndigit[10];
for(i = 0; i < 10; i++)
ndigit[i]=0;
while((c = getchar())!= EOF)
{
switch(c)
{
case '0' :case '1' :case '2' :case '3' :case '4' :case '5' :case '6' :case '7' :case '8' :case '9' : ndigit[c-'0']++;
break;
}
}
printf("digits=");
for(i=0;i<10;i++) printf("%d",ndigit[i]);
return 0;
}
答案 0 :(得分:2)
c是ascii字符值(尽管存储在整数类型中)。例如字符'0'在ascii中是48,所以如果getchar返回字符'0',那么c将具有整数值48。
c - '0'减去两个字符值(ok,它在减去之前将'0'转换为整数48),给出一个准备索引到数组中的整数。
因此char'1'变为整数1,char'2'变为整数2,等等。
对于已知的一组值,这只是从ascii字符值转换为整数值的快速方法。对于超出预期范围'0' - '9'的字符,它会产生奇怪的结果 - 例如如果你用字符“+”做这个,你会得到-5这不是一个好的数组索引。但是没关系,因为switch语句检查它是否在'0' - '7'范围内。