Bootstrap

7-164 统计字符个数

本题目要求统计一串字符中英文字符(‘a’-‘z’,‘A’-‘Z’)的个数、数字字符(‘0’-‘9’)的个数和其他字符的个数。

小贴士:这里需要用循环一个一个的输入单字符,然后每个字符做判断,统计个数。可以用scanf(“%c”,&a);也可以用a=getchar().约定循环判断条件是a!=’&”。注意每次循环都是一个新的a,输入新值。不要一直用的都是第一个a的值做循环判断,那就是死循环了。

算法思想提示:相当于有一串人要通过一个闸机,统计不同颜色衣服的人数,为红色,黄色,绿色。统计计红色衣服的人数,黄色衣服的人数和绿色衣服的人数,约定最后一个人的衣服一定是黑色,后面的就不再通过闸机了。

因此,第一个人过来先判断他是不是黑色衣服。

如果不是黑色开始进入循环体。

判断他是三者颜色中的哪一种,然后对应的颜色计数加一,然后再来一个人过闸机,再判断它是不是黑色,反复循环。要点就是:注意每次要来一个人过闸机,那别老是第一个人循环过闸机判断,如果第一个人不是黑色衣服,就是死循环了,一定要每次循环,来一个新人(新数据),怎么来?用getchar或者scanf接收。

输入格式:

输入一串字符,以'&'结束。

输出格式:

letter=英文字符的个数,digital=数字字符的个数,others=其他字符的个数。

输入样例:

I am 26.&

输出样例:

'&'是结束符,&及其后面的字符都不计算在内,注意空格也是字符

letter=3,digital=2,others=3

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int main( )
{
    int letter=0,digital=0,others=0,i=0;
    char a[100];
    gets(a);
    while(a[i]!='&')
    {
        if(a[i]>='a'&&a[i]<='z')
            letter++;
        else if(a[i]>='A'&&a[i]<='Z')
            letter++;
        else if(a[i]>='0'&&a[i]<='9')
            digital++;
        else
            others++;
        i++;
    }
    printf("letter=%d,digital=%d,others=%d",letter,digital,others);
    return 0;
}

;