C语言统计字符和数字的个数

这是一个C语言 while 循环示例:输入一串以?为结束标志的字符,统计其中字母和数字的个数。

问题分析

输入:从键盘输入一个以?结尾的字符串。

输出:两个整数(分别表示字母和数字的个数)。

这是一个计数问题:重复读入字符,根据字符的类型(字母还是数字),进行个数统计。但是,并不知道输入了多少个字符,只知道输入的字符串中最后一个字符是?。因此,可以使用 while 语句,当读入的字符是?时结束循环,否则判断读入的字符是字母还是数字,并累加计数。

那么,如何判断一个字符是字母还是数字呢?

计算机中所有的字符都是以数字的形式存在的,每一个字符都有一个数字与其对应(参见表 ASCII 标准字符代码表)。因此,一个字符变量“ch”的值是字母还是数字,可以用下面的条件表达式进行判断:
字母:((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))
数字:(ch >= '0') && (ch <= '9')

算法描述

1) 定义字符型变量 ch 用来存放一个字符;
2) 定义整型变量 Letter 和 Digit,作为计数器,分别存放字母和数字的个数,并初始化为 0;
3) 当 ch 不是“?”时,重复执行:
若 ch 是字母,则字母个数 Letter 加 1;
若 ch 是数字,则数字个数 Digit 加 1;
读入一个新字符给 ch;
4) 输出 Letter 和 Digit;
5) 结束。


N-S 图
 
代码清单 1:输入一串以?为结束标志的字符,统计其中字母和数字的个数
#include <stdio.h>
#include <stdlib.h>
int main( )
{
    char ch;
    int Letter = 0,Digit = 0;
    printf("输入一串‘?’结尾的字符:");
    ch = getchar( );                                   //循环外读入第一个字符
    while(ch != '?')
    {
        if(((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')))
            Letter++;                                  //字母的个数加 1
        else if((ch >= '0') && (ch <= '9'))
            Digit++;                                   //数字的个数加 1
        ch = getchar( );                               //继续读入下一个字符
    }
    printf("其中字母的个数是:%d\n",Letter);   
    printf("其中数字的个数是:%d\n",Digit);
    system("pause");
    return 0;
}

运行结果:

输入一串‘?’结尾的字符:321Are you ready?
其中字母的个数是:11
其中数字的个数是:3