浅析C语言中的数组及字符数组

2020-01-06 14:03:37丽君
易采站长站为您分析C语言中的数组及字符数组,是C语言入门学习中的基础知识,需要的朋友可以参考下  

我们来编写一个程序,以统计各个数字、空白符(包括空格符、制表符及换行符)以及所有其它字符出现的次数。这个程序的实用意义并不大,但我们可以通过该程序讨论 C 语言多方面的问题。

所有的输入字符可以分成 12 类,因此可以用一个数组存放各个数字出现的次数,这样比使用 10 个独立的变量更方便。下面是该程序的一种版本:


#include <stdio.h>
/* count digits, white space, others */
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 = %dn", nwhite, nother);
}

当把这段程序本身作为输入时,输出结果为: digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345

该程序中的声明语句 int ndigit[10] 将变量 ndigit 声明为由 10 个整型数构成的数组。在 C 语言中,数组下标总是从 0 开始,因此该数组的 10 个元素分别为 ndigit[0]、ndiglt[1]、…、ndigit[9],这可以通过初始化和打印数组的两个 for 循环语句反映出来。

数组下标可以是任何整型表达式,包括整型变量(如 i)以及整型常量。

该程序的执行取决于数字的字符表示属性。例如,测试语句 if (c >= '0' && c <= '9') 用于判断 c 中的字符是否为数字。如果它是数字,那么该数字对应的数值是 c- '0' 。只有当'0'、'1'、…、'9'具有连续递增的值时,这种做法才可行。幸运的是,所有的字符集都是这样的。

由定义可知,char 类型的字符是小整型,因此 char 类型的变量和常量在算术表达式中等价于 int 类型的变量和常量。这样做既自然又方便,例如,c - '0'是一个整型表达式,如果存储在 c 中的字符是'0'~'9',其值将为 0~9,因此可以充当数组 ndigit 的合法下标。

判断一个字符是数字、空白符还是其它字符的功能可以由下列语句序列完成:


if (c >= '0' && c <= '9')
 ++ndigit[c-'0'];
else if (c == ' ' || c == 'n' || c == 't')
 ++nwhite;
else
 ++nother;