8.5.3 统计字符串中的字符
本节将讲解一个统计字符串中的字符的例子。文本中的字符串,是由不同的大写字母、小写字母、标点符号等不同字符构成的。在程序中可以把文本存储在字符串中,然后分别统计出文本中的各种字符个数然后输出。为了识别这些字符,需要学习ASCII码。计算机中的所有字符,都是以ASCII码的形式保存在计算机中的。每一个ASCII码在内存中占据一个字节。ASCII码与相对应的序号如图8-2所示。
|
| 图8-2 ASCII码表 |
字符的ASCII码值与整型变量是等同的,这就很容易把字符与整型变量联系起来,通过序号的比较可以判断这些字符的种类。从图8-2可知,字符与序号的分布可以总结成下面的分段。
48~57:数字字符。
65~90:大写字母。
97~122:小写字母。
其他字符:特殊符号或标点符号。
要完成字符的统计,需要在程序中完成下面这些步骤。
定义一个字符数组,用来存储字符串。
定义相关的计数变量。变量要赋初值为0。
从键盘输入一个字符串,这一操作可以用scanf()函数实现。
用循环的方法,访问字符串中的每一个字符。
对每一个字符判断字符的类型,然后改变计数的值。
用printf()函数输出统计结果。
根据这些步骤,编写的程序代码如下所示。
【范例8-12】统计输入的字符,实例代码如下所示。
实例代码8-12
- 01 #include <stdio.h>
- 02 int main()
- 03 {
- 04 char a[100]; /*定义一个字符数组保存字符串。*/
- 05 int i,uper,lower,marks,num; /*定义计数的变量。*/
- 06 i=0; /*计数变量赋初值为0。*/
- 07 uper=0;
- 08 lower=0;
- 09 marks=0;
- 10 num=0;
- 11 printf("please input a string:\n") ; /*提示输入信息。*/
- 12 scanf("%s",a); /*输入一个字符串。*/
- 13 while(a[i]!=NULL) /*循环访问字符串中的第一个字符。*/
- 14 {
- 15 if(a[i]<=57&&a[i]>=48) /*判断是否是数字。*/
- 16 {
- 17 num++; /*是数字则数字计数加1。*/
- 18 }
- 19 else /*其他的可能。*/
- 20 {
- 21 if(a[i]<=90&&a[i]>=65) /*判断是否是大写字母。*/
- 22 {
- 23 uper++; /*是小写字母则大写字母的记数加1。*/
- 24 }
- 25 else /*其他的情况。*/
- 26 {
- 27 if(a[i]<=122&&a[i]>=97) /*判断是否是小写字母。*/
- 28 {
- 29 lower++; /*是小写字母则小写字母的记数加1。*/
- 30 }
- 31 else
- 32 {
- 33 marks++; /*其他的情况一定是特殊字符加1。*/
- 34 }
- 35 }
- 36 }
- 37 i++; /*字符总数加1,进行下一次循环。*/
- 38 }
- 39 printf("total chars: %d \n",i) ; /*输出总字符数。*/
- 40 printf("uper chars: %d \n",uper) ; /*输出大写字符数。*/
- 41 printf("lower chars: %d \n",lower) ; /*输出小写字符数。*/
- 42 printf("number chars: %d \n",num) ; /*输出数字字符数。*/
- 43 printf("other chars: %d \n",marks) ; /*输出其他字符数。*/
- 44 return 0;
- 45 }
【执行结果】输入下面的命令,编译这个程序。- gcc 8.12.c
输入下面的命令,运行这个程序。- ./a.out
程序提示输入一个字符串,这时输入下面的字符串,然后按"Enter"键。需要注意的是,字符串中不要有空格。 - asdfghJKLMNQWERT123789123;',./ASDJjhjad
程序显示出的统计结果如下所示。- total chars: 39
- uper chars: 14
- lower chars: 11
- number chars: 9
- other chars: 5
【代码解析】代码第15行、第21行和第27行判断输入的字符类型,它们是利用字符在计算机内保存的是其ASCII值的特点来实现的。