连滚带爬重学C语言[0]
啃着《The C Programming Language》重学C语言。
在看到1.6数组的时候,有一个例子:
在这部分内容中,我们来编写一个程序,以统计各个数字、空白符(包括空格符、制表符及换行符)以及所有其他自负出现的次数。这个程序的实用意义并不大,但我们可以通过该程序讨论C语言多方面的问题。
照着例子敲了一遍
View Code
1 #include <stdio.h> 2 3 int main() 4 { 5 int c = 0; 6 int i = 0; 7 int nwhite = 0; 8 int nother = 0; 9 int ndigit[10]; 10 for(i=0; i<10; i++) 11 { 12 ndigit[i] = 0; 13 } 14 15 while((c = getchar()) != EOF) 16 { 17 if(c >= '0' && c <= '9') 18 { 19 ++ndigit[c - '0']; 20 } 21 else if(c == ' ' || c == '\n' || c == '\t') 22 { 23 ++nwhite; 24 } 25 else 26 { 27 ++nother; 28 } 29 } 30 printf("digits ="); 31 for (i = 0; i < 10; ++i) 32 { 33 printf(" %d", ndigit[i]); 34 } 35 printf(", white space = %d, other = %d\n", nwhite, nother); 36 return 0; 37 }
其中有一句
++ndigit[c - '0'];
我是百思不得其解,这句到底是干嘛的啊。
然后顿悟。。这尼玛太给力了,这是统计0123456789十个字符出现的次数啊,而且还是用这么屌的方法。
数组ndigit[0,0,0,0,0,0,0,0,0,0],第一位代表"0"出现的次数,第二位代表"1"出现的次数,依此类推。
比如,只输入0
看,第一位是1,说明0出现了1次。
然后,重新输入02468
好吧,我猜这次的结果是1 0 1 0 1 0 1 0 1 0
输入000000000111111112222222333333444445555666778
其实吧,在看了这个程序之后,我才发现我有多幼稚 T_T,之前自己想的是,写个switch…case来统计每个数字出现的次数。
哈哈哈(笑得好凄惨
我的确是个菜鸟啊。
似乎可以引申到统计各个字母出现的次数。(他们的ASIIC码是连续的




浙公网安备 33010602011771号