解题思路和注意事项:


在这里我们会用到getchar()函数,简单来说,getchar()就是从键盘获取字符,直到回车为止;


代码中while里的表达式(c = getchar()) != '\n',意思是,当输入的字符不是换行符的时候,继续往下执行;


注意这里的括号不能丢,因为!=的优先级比=高,如果去掉了外面的括号就等价于 c = (getchar()!='\n');

参考代码:

#include<stdio.h>
int main()
{
	int letter = 0,number = 0,blank = 0,others = 0,c;        //分别为字母、数字、空格、其他
	while((c = getchar()) != '\n'){
		if(c >= 'A' && c<='Z' || c >= 'a' && c <= 'z')    //判断是否为字母
			letter++;
		else if(c >= '0' && c <= '9')                     //判断是都为数字
			number++;
		else if(c == ' ')                                 //判断是否为空格
			blank++;
		else                                              //其他
			others++;
	}
	printf("%d %d %d %d\n",letter,number,blank,others);
	return 0;
}


点赞(96)
 

0.0分

137 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 138 条评论

simplelife 5年前 回复TA
@simplelife 求解答
simplelife 5年前 回复TA
#include<stdio.h>
int main()
{
int a=0,b=0,c=0,d=0,i;//a表示英文字母b表示数字c表示空格d表示其他字符;
scanf("%d",&i);
while((i= getchar()) !='\n')
{
if(i>='A' && i<='Z' || i>='a' && i<='z')
a++;
else if(i>='0' && i<='9')
b++;
else if(i==' ')
c++;
else
d++;
}
printf("%d %d %d %d\n",a,b,c,d);
return 0;
}
运行可以,提交显示错误百分之五十
simplelife 5年前 回复TA
@c无言 大写字母65到90和小写字母97到122之间还有其它的字符
c无言 5年前 回复TA
#include<stdio.h>
int main()
{
	char a,j=0,k=0,i=0,l=0;		//j字母,k数字,i空格,l其他字符
	while(a=getchar())
	{
		if(a==10)
			break;
		else if(a>=65&&a<=122)
			j++;
		else if(a>=48&&a<=57)
			k++;
		else if(a==32)
			i++;
		else 
			l++;
	}
	printf("%d  %d  %d  %d\n",j,k,i,l);
	return 0;
}

答案错误,不知道哪里不对,求告知
Strider 5年前 回复TA
@Strider @15138964863 这里如果用\n是不能执行的 可以认为在getche中enter==\r,所以我在输出前边加了换行,不然输出和输入的字符会叠在一行。你可以运行下试试。
天机龙少 5年前 回复TA
@Strider while那里是不是把n写成r了...
多远才是尽头 5年前 回复TA
@秃头恶魔 while一行中n前的斜杠打反了
Strider 5年前 回复TA
#include<stdio.h>
#include<conio.h>
int main() 
{
	int num = 0, letter = 0, space = 0, other = 0;
	char c;
		c=_getche( );
		while (c!='\r')
		{
			if ('0' <= c && c <= '9')
				num++;
			else if ('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z')
				letter++;
			else if (c == ' ')
				space++;
			else other++;
			c = _getche();
		}
		printf("\n%d %d %d %d", letter, num, space, other);
	
	return 0;
}

自己运行没有问题,提交提示编译错误,有没有大佬指导下,哪里有错误
秃头恶魔 5年前 回复TA
#include<stdio.h>
int main()
{
    int c=0, n=0, o=0, b=0, p;
    while((p=getchar())!='/n')
    {
        if(p>='a'&&p<='z'||p>='A'&&p<='Z')
        c++;
        else if(p>='0'||p<='9')
        n++;
        else if(p==' ')
        b++;
        else
        o++;
    }
    printf("%d %d %d %d", c, n, b, o);
    return 0;
}
为什么时间超限啊
一叶知秋 5年前 回复TA
#include <stdio.h>
int main()
{
  /* 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。 */
  int c;
  int nY,nS,nB,n,nQ=0;
  n=nY=nB=nS=nQ;
  while((c=getchar())!= '\n'){
    n++;
    if(c>='a'&&c<='z'||c>='A'&&c<='Z') nY++;
    if(c>='0'&&c<='9')  nS++;
    if(c==' ') nB++;
    nQ=n-nY-nS-nB;
  };
  printf("%d %d %d %d",nY,nS,nB,nQ);
  return 0;
}