C 笔记八 数组

编写程序,统计各个数字、空白符(包括空格符、制表符及换行符)以及其他字符出现的次数。

* array.c */
#include  

int main() {
        int c, i, nwhite, nother;
        int ndigit[10];

        nwhite = nother = 0;

        /* 初始化为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);

        return 0;
}

变量 digit 声明了为由 10 个整型数构成的数组,数组下标从 0 开始,因此该数组的 10 个元素分别为 ndigit[0]、ndigit[1]、...、ndigit[9],数组下标可以是任何整型表达式,包括整形变量(如 i)以及整型常量。

int ndigit[10];

char 类型变量和常量在算术表达式中等价于 int 类型的变量和常量。因此 c - '0' 是一个整形表达式,因此可以充当数组 ndigit 的合法下标。

程序中经常使用的多路判定方式:各条件从前往后依次求值,直到满足某个 condition,执行对应的 statement,执行完成后直接退出整个语句,不再对后面的 condition 进行判断(如果还有的话)。如果所有的 condition 都不满足,执行最后一个 else 对应的 statement(如果有的话)。

if (condition) 
    statement;
else if (condition) 
    statement;
...
...
else
    statement;

编译运行结果:

$ ./array.out 
123 456 789 0
april is a dog's dream
digits =  1 1 1 1 1 1 1 1 1 1, white space = 9, other = 18

你可能感兴趣的:(C 笔记八 数组)