解题思路和注意事项:


在这里我们会用到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 条评论

北先生 4年前 回复TA
@helena 因为不知道输入的字符的数量,用数组不太准确
紫晶之巅 4年前 回复TA
@离殇 a是字符,应该用char
离殇 4年前 回复TA
@离殇 我敲!敲错了,改完后如下:#include <stdio.h> //ÊäÈëÒ»ÐÐ×Ö·û£¬·Ö±ðͳ¼Æ³öÆäÖÐÓ¢ÎÄ×Öĸ¡¢Êý×Ö¡¢¿Õ¸ñºÍÆäËû×Ö·ûµÄ¸öÊý¡£ void main()  {         int a,c=0,num=0,space=0,y=0;          while((a = getchar()) != &#039;
&#039;)         {                 if(a>=&#039;A&#039;&&a<=&#039;Z&#039;||a>=&#039;a&#039;&&a<=&#039;z&#039;) 				{                     ++c; 						 				}                         else if(a>=&#039;0&#039;&&a<=&#039;9&#039;)                 {                     ++num; 				}                     else if(a==&#039; &#039;) 				{                     ++space;         		}         		else         		{         			++y; 				} 		}         printf("%d %d %d %d
",c,num,space,y);         return 0; }
离殇 4年前 回复TA
#include <stdio.h>
//输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
void main()

{
        int a,c,num,space,y;

        a = c = num = space = y = 0;
        while((a = getchar()) != '\n')
        {
                if(a>='A'&&a>='Z'||a>='a'&&a>='z')
				{
                    ++c;	
				}        
                else if(a>='0'&&a<='9')
                {
                    ++num;
				}    
                else if(a==' ')
				{
                    ++space;
        		}
        		else
        		{
        			++y;
				}
		}
        printf("%d %d %d %d\n",c,num,space,y);
}
提交说我答案错误50%。。。。。。可我编译器没啥错误啊。。。求解
子书你个大胖子 5年前 回复TA
@药不能停 我用codeblocks也是这样对的,答案是对的,不知道为什么这个就说答案错了,等一个老师来解答
helena 5年前 回复TA
这个为什么不能用数组,就是先用strlen求数组长度,然后再用for循环
soking 5年前 回复TA
@鹿艺777 a = getchar()没有进入循环,只能接收输入的一个字符
鹿艺777 5年前 回复TA
#include<stdio.h>
void main()
{
	int a,count1=0,count2=0,count3=0,count4=0;
	a=getchar();
	while(a!='\n')
	{
	if(a==' ')
		count1++;
	else if(a>=65&&a<=90||a>=97&&a<=122)
			count2++;
	else if(a>=48&&a<=57)
				count3++;
	else
	 	count4++;
	}
	printf("%d,%d,%d,%d",count2,count3,count1,count4);
}

这个为什么输入为数据后,回车没用
月夜明 5年前 回复TA
@90度微笑 我也是,哭了
药不能停 5年前 回复TA
#include <stdio.h>
#include <string.h>
int main(void){
	char str[500];
	gets(str);
	
	int i;
	int cnt_ch = 0, cnt_num = 0, cnt_spa = 0, cnt_sym = 0;
	for(i=0; i<strlen(str); i++){
		if((str[i]>='A' && str[i]<='Z') || (str[i]>='a' && str<='z')){
			cnt_ch++;
		}
		else if(str[i]>='0' && str[i]<='9'){
			cnt_num++;
		}
		else if(str[i]==' '){
			cnt_spa++;
		}
		else{
			cnt_sym++;
		}
	}
	printf("%d %d %d %d\n", cnt_ch, cnt_num, cnt_spa, cnt_sym);
	
	return 0;
}
请问用字符串做为什么不对?