解题思路:

1、可以使用gets()/scanf()获取待统计的字符。

2、scanf()获取字符的时候应该使用scanf("%[^\n]"),除了回车键全部读入。

注意事项:

参考代码:

#include<stdio.h>
#include<string.h>

void statistics(char *str, int *num_char, int *num_num, int *space_num, int *other_num)
{
	int len=0, i=0;
	len = strlen(str);
	*num_char = 0;
	*num_num = 0;
	*space_num = 0;
	*other_num = 0;
	for(i = 0; i < len; i++)
	{
		if(str[i]>='0' && str[i]<='9')
			*num_num+=1;
		else if( (str[i]>='a' && str[i]<= 'z') || (str[i]>='A' && str[i]<='Z'))
			*num_char+=1;
		else if(str[i]==' ')
			*space_num+=1;
		else
			*other_num+=1;
	}
}

int main()
{
	char Mystring[1024];
	int num_char, num_num, space_num, other_num;
	scanf("%[^\n]", Mystring);
	statistics(Mystring, &num_char, &num_num, &space_num, &other_num);
	printf("%d %d %d %d\n", num_char, num_num, space_num, other_num);
	return 0;
}


点赞(14)
 

0.0分

29 人评分

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

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

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

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

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

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

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

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

评论列表 共有 64 条评论

玛卡巴卡 3年前 回复TA
#include<stdio.h>
#include<string.h>
void fun(char *i,int j,int *a,int *b,int *c,int *d)
{
		*a = 0;
		*b = 0;
		*c = 0;
		*d = 0;
	for(int m = 0;m < j;m++)
	{
		if((i[m] >= 'a' && i[m] <= 'z') || (i[m] >= 'A' && i[m] <= 'Z'))
			*a+=1;
		else if(i[m] >= '0' && i[m] <= '9')
			*b+=1;
		else if(i[m] == ' ')
			*c+=1;
		else 
			*d+=1;
	}
}
int main()
{
	char arr[100];
	int l;
	int a,b,c,d;
	gets(arr);
	l = strlen(arr);
	fun(arr,l,&a,&b,&c,&d);
	printf("%d %d %d %d\n",a,b,c,d);
	return 0;
}
uq_87534612122 3年前 回复TA
#include<stdio.h>
#include<string.h>
int main()
{
    int i,j=0,k=0,d=0,s=0,n;
    char a[100];
    for(i=0;i<100;i++){
        scanf("%c",&a[i]);
	}
	n=strlen(a);
	for(i=0;i<n;i++){
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
            j++;
            else
            if(a[i]>='0'&&a[i]<='9')
            k++;
            else
            if(a[i]==' ')
            d++;
            else
            s++;
    }
   printf("%d %d %d %d",j,k,d,s);
    return 0;
}
为什么错误
一个之昂 3年前 回复TA
@Theni 试试给数组初始化一下&#039;&#039;
水更流 3年前 回复TA
@Theni 好像是因为字符数组长度太小
codegun 3年前 回复TA
@小谭 我一开始用的也是你这个while条件,报错超时。我猜测是后台测试的时候输入一行以后并没有换行,所以while循环无法跳出。换用gets即可解决问题。
Theni 3年前 回复TA
#include<stdio.h>
#include<string.h>
extern int q=0,w=0,e=0,r=0;
void x(char a[30])
{
    int i,len;
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
        q++;
        else if(a[i]>='0'&&a[i]<='9')
        w++;
        else if(a[i]==' ')
        e++;
        else
        r++;
    }
}
int main()
{
    char a[30]={};
    gets(a);
    x(a);
    printf("%d %d %d %d",q,w,e,r);
}
为什么结果正确但运行错误50呢?@.@
KK 3年前 回复TA
@晨续 “int letter,number,space,others=0”分开初始化为0;还有“if((a[i]>=&#039;a&#039; && a[i]<=&#039;z&#039;) || (a[i])>=&#039;A&#039; && a[i]<=&#039;Z&#039;)”,仔细看多了个右括号。修改完就对了。
win 3年前 回复TA
@晨续 @uq_42471485268 没必要初始化吧
win 3年前 回复TA
@邹宇强 你的判断语句有错,对字母和数字判断,应该是大于等于,你忘加等于了。
他和他的猫 3年前 回复TA
@cando 因为你写错了