解题思路:

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

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

注意事项:

参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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)
 

8.4 分

29 人评分

 

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

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

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

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

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

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

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

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

评论列表 共有 64 条评论

踏上星辰 4年前 回复TA
@踏上星辰 不好意思,在主函数看到了。QAQ
踏上星辰 4年前 回复TA
函数声明应该要加上吧
景明 4年前 回复TA
@年轮 请看清题目,题目说要求使用函数
aviyet 4年前 回复TA
#include <stdio.h>
void func(char *str, int len, int *a, int *b, int *c, int *d) {
	for (int i=0; i<len; i++) {
		if (str[i]>='a' && str[i]<='z') {
			(*a)++;
		} else if (str[i]>='A' && str[i]<='Z') {
			(*a)++;
		} else if (str[i]>='0' && str[i]<='9') {
			(*b)++;
		} else if (str[i] == ' ') {
			(*c)++;
		} else {
			(*d)++;
		}
	}
}
int main(void) {
	char str[256];
	int a=0, b=0, c=0, d=0;
	gets(str);
	func(str, 256, &a, &b, &c, &d);
	printf("%d %d %d %d\n", a, b, c, d);
	return 0;
}
哪里错了?
碳碳双键 4年前 回复TA
@Nemo 后面i输出的时候,应该是i<4吧?然后前面讲统计值转换成字符类型应该是加48吧?(感觉是)
年轮 4年前 回复TA
#include<stdio.h>
int main()
{
	char s[100];
	int a=0,b=0,c=0,d=0,i;
	gets(s);
	for(i=0;i<100;i++)
	{   if(s[i]=='\0') break;
		if(s[i]<=90&&s[i]>=65) a++;
		else if(s[i]<=122&&s[i]>=97) a++;
		else if(s[i]<57&&s[i]>48) b++;
		else if(s[i]==' ') c++;
		else d++;
	}
	printf("%d %d %d %d",a,b,c,d);
	return 0;
 } 
求问哪里出错了50%
C小菜鸡 5年前 回复TA
@肖哥歌 scanf 遇到空格、tap、回车就自动结束,你可以用gets()、或者循环用scanf()
白鸽 5年前 回复TA
#include <stdio.h>
int main()
{
    void add(char n);
    char ch;
    scanf("%c",&ch);
    add(ch);
}
void add(char n)
{
    int a=0,b=0,c=0,d=0;
    while((n=getchar())!='\n')
    {
        if((n>='a'&&n<='z')||(n>='A'&&n<='Z'))
        {a++;}
        else if(n>='0'&&n<='9')
        {b++;}
        else if(n==' ')
        {c++;}
        else
        {d++;}
    }
    printf("%d %d %d %d",a,b,c,d);
}

时间超限。。。
颜伦基 5年前 回复TA
@汪辰凯 因为使程序结构化
专业报大腿 5年前 回复TA
@大浪 没错啊