解题思路:考虑到要判断字母、数字、空格和其他,因为其他的种类很多,所以我们放在最后进行统计,然后巧妙的利用if——else if——else结构即可完成要求。

注意事项:记得要#include <ctype.h>,这个头文件里有isalpha(判断字母)、isdigit(判断数字)这两个函数。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int main()
{

    char a[100],b[4]={0};//第一行申请空间
    gets(a);//第二行获取输入
    for(int i=0;i<strlen(a);i++)//第三行循环结构
    {
        if(isalpha(a[i])) b[0]++;第四行判断字母
        else if(isdigit(a[i])) b[1]++;第五行判断数字
        else if(a[i]==' ') b[2]++;第六行判断空格
        else b[3]++;第七行判断其他
    }
    printf("%d %d %d %d",b[0],b[1],b[2],b[3]);第八行输出

    return 0;
}


点赞(6)
 

0.0分

2 人评分

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

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

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

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

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

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

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

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

评论列表 共有 6 条评论

健身的熊 5年前 回复TA
#include<stdio.h>
#include<string.h>
int k=0;
int l=0;
int m=0;
int n=0;

int Tj(char a[], char b[])
{
	int i;
	int j=0;

	for(i=0; i<strlen(a); i++)
	{
		b[j]=a[i];
		j++;
	}

	for(j=0; j<strlen(a); j++)
	{
		if(('a'<b[j] && b[j]<'z') || ('A'<b[j] && b[j]<'Z'))
		{
			k++;
		}
		else if('0'<b[j] && b[j]<'9')
		{
			l++;
		}
		else if(b[j]==' ')
		{
			m++;
		}
		else
		{
			n++;
		}
	}
	return k,l,m,n;
}

int main()
{
	char a[1000];
	char b[1000];

	gets(a);
	Tj(a,b);

	printf("%d %d %d %d",k,l,m,n);
	return 0;
}           答案错误50%
qweuihqqi 5年前 回复TA
总有人不读题目
Gu-f 5年前 回复TA
@1810819101 是的,那个是编译器自动给我加的,我没删除,哈哈
1810819101 5年前 回复TA
头文件其实只要#include<stdio.h>就行了
Gu-f 6年前 回复TA
@Nemo 非常抱歉,没能及时回复,这几天处于考试周忙于准备考试,见谅,今天上号的时候看到你这个评论了,在此给你解释一下啊。你的这个代码乍一看问题不大只是有一处错误(第一个else if 后面应该<=122或者<123),但是仔细一分析就会发现出了很大的错误,就是在输出的时候,你用的是%c进行的输出,即输出的是字符,你想一下,如果字母有97个,其他都为0,那理论上应该输出97 0 0 0 但是由于你用的是%c的输出所以97自动变成小写字母a  那么判题机在判题的时候就会出错因为你输出的是a 0 0 0而不是97 0 0 0,所以输出数据个数的时候建议用int型,这样可以避免错误。还有就是写代码要仔细一下,第一个else if那里判断条件错了,加上=号或者<123.      你可以用这个数据测试一下,看看你的现在这个代码的输出效果和预期的差别   测试数据:111111111111111111111111111111111111111111111111111
Nemo 6年前 回复TA
大侠,看一下我的,为嘛不行呢
#include <stdio.h>
#include <string.h>
void tj(char *a)    //定义函数
{
	int n=strlen(a); //求实际有效长度
	int i;
	int m=0,s=0,k=0,q=0;
	for(i=0;i<n;i++){
		if(a[i]==' ') k++;
		else if(a[i]>96&&a[i]<122) m++;
		else if(a[i]>64&&a[i]<91) m++;
		else if(a[i]>47&&a[i]<58) s++;
		else q++;
		a[i]=0;       //比较过后,将当前字符改为0;
	}
	a[0]=m+'0';
	a[1]=s+'0';
	a[2]=k+'0';       //将统计值改为字符类型
	a[3]=q+'0';       //并赋值给数组a的前4个元素,
}
int main()
{
	int i;
	char a[100]={0};
	gets(a);
	tj(a);
	for(i=0;i<5;i++){
	printf("%c ",a[i]);   //输出数组a的前4个元素
	}
	return 0;
}