本题目要求统计一串字符中英文字符(‘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;
}