统计不同字符如何简化

Description

输入一行字符,分别统计其中英文字母、空格、数字和其它字符的个数。

Input

键盘上的任意字符串,以;结束。

Output

character= ,blank= ,digit= ,other= ;

Sample Input

case 1:printf("very good!");
Sample Output

character=18,blank=2,digit=1,other=6;

我这个答案是正确的 但运行超时 我不知道如何简化
#include <stdio.h>
int main()
{ char str[100];
int character=0,blank=0,digit=0,other=0,i=0;
printf("",str);
while((str[i]=getchar())!='\n')
{
if (str[i]>='a'&&str[i]<='z'||str[i] >='A'&&str[i]<='Z')
{
character++;
}
else if(str[i]==' ')
{
blank++;
}
else if (str[i]>='0'&&str[i]<='9')
{
digit++;
}
else
{
other++;
}
}
printf("character=%d,blank=%d,digit=%d,other=%d;",character,blank,digit,other);
return 0;
}

printf("",str);你这输出个空字符串是要闹哪样,好好检查代码,只保留必要的功能,把不相干的都删掉
还有,要么你直接一个scanf("%s")把整个字符串都读进数组里,然后循环;要么直接判断getchar()到底是个什么字符,
你都已经一个字符一个字符的读取了,再定义个数组完全多此一举啊
另外你代码里根本没有i++,你相当于申请了100个char然后只用到了第一个

#include <stdio.h>
int main()
{ char c;
int character=0,blank=0,digit=0,other=0;
printf("");
while((c=getchar())!='\n')
{
if (c>='a'&&c<='z'||c >='A'&&c<='Z')
{
character++;
}
else if(c==' ')
{
blank++;
}
else if (c>='0'&&c<='9')
{
digit++;
}
else
{
other++;
}
}
printf("character=%d,blank=%d,digit=%d,other=%d;",character,blank,digit,other);
return 0;
}