解题思路: 此题可用两种方法来做

方法一:

1.了解ASCII表,那些字符在哪里,用那些字符对应的数字,也可不用了解,直接用字符就行

2.要声明4个变量分别记录题目(字母、数字、空格、其他字符)要求的数量,和一个字符变量利用getchar()获得赋值

3.用getchar()利用while循环读取字符,while循环里用if else嵌套给对应的字符数加一

 4.利用printf()输出出来

方法二:

如果对gets(),strlen(),数组不了解的话,此法可不看

1.先声明一个数组用于gets()来存储输入

声明4个变量来存储对应的字符数

2.strlen()获取输入的长度,用于后面的for循环

3.利用for循环计算各字符数

20200728090157350.png
注意事项: 注意while循环里里面的条件

参考代码:

1.利用getchar()

#include <stdio.h>
int
main(void)
{
	int letter = 0, number = 0, space = 0, other = 0;
	char ch;
	
	while( (ch = getchar()) != '\n'){     /*这里的‘\n’不能换成EOF,要不就把输入的换行符输入进来当成其他字符处理,
	                                        因此其他字符的数量将比题目所给的数量多一*/
	    if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
	    	letter += 1;   //letter表示字母数量
	    else
		if (ch == ' ')
	    	    space += 1;  //空格数量
	    	else
		    if (ch >= '0' && ch <= '9')
	    		number += 1; //数字数量
	    	    else
	    		other += 1;  //其他字符数量
	}
	printf("%d %d %d %d", letter, number, space, other);
	
	return 0;
}

ii:for(),数组处理

#include <stdio.h>
#include <string.h> 
int
main(void)
{
	char str[200];//声明一个数组用于存储输入的字符
	int letter = 0, number = 0, space = 0, other, n;
	
	gets(str); //获取输入并存储到数组里,gets会把输入的换行符\n丢弃
	n = strlen (str); //获取输入的字符长度
	
	
	
	for(int i = 0; i < n; i++)//for循环可以声明变量同时初始化,多个声明用 , 逗号隔开
	{
		if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
			letter += 1;
		if (str[i] == ' ')
		    space += 1;
		if (str[i] >= '0' && str[i] <= '9')
			number += 1;		 
	}
	other = n - space - number - letter; //把整个字符长度减去字母数、空格、数字得出其他字符的数量
	
	printf("%d %d %d %d", letter, number, space, other);
	
	return 0;
}


点赞(2)
 

0.0分

76 人评分

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

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

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

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

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

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

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

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

评论列表 共有 47 条评论

Lgun 11月前 回复TA
#include<stdio.h>
int main()
{
    int letter=0,number=0,space=0,other=0;
    char ch;
    while ((ch=getchar())!='n'){
        if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')){
            letter+=1;
        }
        else if(ch>='0'&&ch<='9'){
            number+=1;
        }
        else if(ch==' '){
            space+=1;
        }
        else{
            other+=1;
        }
    }
    printf("%d %d %d %d",letter,number,space,other);
    return 0;
}
大佬们请问我这个哪里错了啊
notshine 1年前 回复TA
#include<stdio.h>
int main()
{
    int n;
    long long x=1,Sn=0;
    scanf("%d",&n);
    if(n==0){
        Sn=0;
    }else{
        for(int i=1;i<=n;i++){
            x=x*i;
            Sn=Sn+x;
        }
    }
    printf("%lld",Sn);
    return 0;
}
亮哥丬 1年前 回复TA
@高赛文 输出要放在循环外
高赛文 1年前 回复TA
#include <stdio.h>

int main(void){
    int letter = 0,number = 0,space = 0,other = 0;
    char ch;
    while( (ch = getchar()) !='\n'){
        if((ch >='A'&& ch <='Z')||(ch >='a'&&ch <='z'))
            letter += 1;
        else if(ch ==' ')
            space += 1;
        else if(ch>='0'&& ch<='9')
            number += 1;
        else
            other += 1;
            printf("%d %d %d %d", letter, number, space, other);
    }
    
    return 0;
}
//这是哪里出问题了,显示答案错误
徐尽欢 1年前 回复TA
@Toxicant @dotcpp0706029 你不能自己单独发,自己当楼主吗?这发的这么乱,谁会帮你看啊?
徐尽欢 1年前 回复TA
@黄义尧 回复错了人了,不好意思
徐尽欢 1年前 回复TA
@涂君瑢 你的输出和答案样例的输出顺序不一样,答案是“23 16 2 4”,你的是“23 2 16 4”
徐尽欢 1年前 回复TA
@黄义尧 你的输出和答案样例的输出顺序不一样,答案是“23 16 2 4”,你的是“23 2 16 4”
涂君瑢 1年前 回复TA
#include<stdio.h>
#include<string.h>
int main()
{
  char str[100];
  int letter=0,number=0,kongge=0,other=0;
  int n;
  gets(str);
  n=strlen(str);
  for(int i=0;i<=n;i++)
  {
      if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')
        letter+=1;
      if(str[i]==' ')
        kongge+=1;
      if(str[i]>='0'&&str[i]<='9')
        number+=1;
        
  }
  other=n-letter-kongge-number;
  printf("%d %d %d %d",letter,kongge,number,other);
  return 0;
}为什么提交时一直显示答案错误呢?
但是在线测试里面是算得出正确结果的啊?
哪位大神可以解释一下哇!
Mrqian 1年前 回复TA
@黄义尧 回复错了不好意思