连滚带爬重学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

0

看,第一位是1,说明0出现了1次。

然后,重新输入02468

好吧,我猜这次的结果是1 0 1 0 1 0 1 0 1 0

1

输入000000000111111112222222333333444445555666778

2

 

其实吧,在看了这个程序之后,我才发现我有多幼稚 T_T,之前自己想的是,写个switch…case来统计每个数字出现的次数。

哈哈哈(笑得好凄惨

我的确是个菜鸟啊。

 

似乎可以引申到统计各个字母出现的次数。(他们的ASIIC码是连续的

posted @ 2013-02-20 15:18  Vici柒  阅读(216)  评论(0)    收藏  举报