解题思路:C标准中有一个一个头文件<ctype.h>,这里面定义了一批C语言字符处理函数,用于测试字符是否属于特定的字符类别,如字母字符、控制字符、数字、等等;


头文件:<ctype.h>

函数:

    (1)int isalpha(int ch);

            判断ch是否为字母,如果是返回非0,反之返回0;

    

    (2)int isdigit(int ch);

            判断ch是否为数字,如果是返回非0,反之返回0;


    (3)int islower(int ch);

            判断ch是否为小写字母,如果是返回非0,反之返回0;

    

    (4)int isupper(int ch);

            判断ch是否为大写字母,如果是返回非0,反之返回0;

    

        ……

        等等很多处理字符的函数,大家有兴趣可以去看看博客。


注意事项:

参考代码:

#include <stdio.h>
#include <ctype.h>
int main()
{
    int letter = 0,number = 0,blank = 0,others = 0,c;        //分别为字母、数字、空格、其他
    while((c = getchar()) != '\n'){
        if(isalpha(c))              //判断是否为字母
            letter++;
        else if(isdigit(c))         //判断是都为数字
            number++;
        else if(c == ' ')           //判断是否为空格
            blank++;
        else                        //其他
            others++;
    }
    printf("%d %d %d %d\n",letter,number,blank,others);
    return 0;
}


点赞(38)
 

0.0分

87 人评分

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

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

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

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

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

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

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

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

评论列表 共有 53 条评论

名字好难想 2年前 回复TA
#include<stdio.h>
#include<string.h>
int main(){
	char a[100];
	int let=0,num=0,cnt=0,oth=0,n,i;
	gets(a);
	n=strlen(a);
	for(i=0;i<=n;i++){
	
	if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'){
		let++;
	}else if(a[i]>='0'&&a[i]<='9'){
		num++;
	}else if(a[i]==' '){
		cnt++;
	}else{
		oth++;
	}
	}
	printf("%d %d %d %d\n",let,num,cnt,oth);
	
	
	
	return 0;
}  
大佬们,为什么我这么写其他字符会多一个啊(我吧other-1然后过了),是因为用了gets的缘故吗
llc 2年前 回复TA
#include<stdio.h>
int main()
{
	char arr[200];
	int count = 0;
	int bit = 0;
	int cit = 0;
	int tit = 0;
	scanf("%[^\n]", arr);
	char* p = arr;
	while (*p !='\0')
	{
		if (*p == 32)
			count++;
		else if (*p > 64 && *p < 123)
			bit++;
		else if (*p > 47 && *p < 58)
			cit++;
		else
			tit++;
		*p++;
	}
	printf("%d %d %d %d", bit, cit, count, tit);
	return 0;
}
原来是用库函数解,亏我还上网查怎么输入空格。
迟迟 3年前 回复TA
#include<stdio.h>
#include<string.h>
int main()
{
	char str[200],j;
	int i,a=0,b=0,c=0,d=0;
	gets(str);
	int len = strlen(str);
	for(i=0;i<len;i++)
	{
		j=str[i];
		if(j>='a'&&j<='z'||j>='A'&&j<='Z')
		{
			a++;
		}
		else if(j>='0'&&j<='9')
		{
			b++;
		}
		else if(j==' ')
		{
			c++;
		}
		else
		{
			d++;
		}
	}
	printf("%d %d %d %d",a,b,c,d);
}
林毅 3年前 回复TA
/*输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。*/
#include <stdio.h>
int main()
{
	char c;
	int zimu=0, shuzi=0, kongge = 0, qita = 0;
	while ((c = getchar()) != '\n')
	{
		if ('a' <= c && c<= 'z' || 'A' <= c && c <= 'Z')
		{
			zimu++;
		}
		else if ('0' <= c && c <='9')
			shuzi++;
		else if (c == ' ')
			kongge++;
		else
			qita++;
	}
	printf("%d %d %d %d\n", zimu, shuzi,kongge,qita);
}
fttd 3年前 回复TA
@uq_49487142223 或者用gets
暗中讨饭 3年前 回复TA
为什么要用while
tangqin 3年前 回复TA
@Hit哈工 将scanf(“%s”,&c)改成scanf("%%[^
]",&c)即可。因为scanf(“%s”,&c)没有办法输出带空格的字符串的
纯牛奶和酸牛奶 3年前 回复TA
@uq_49487142223 因为scanf碰见空格结束输入,所以你应该用正则表达式,scanf(“%[^
]”,str),让你的输入在碰见回车才结束
小奥头号粉丝 3年前 回复TA
@我要吃肉肉 scanf函数不能存储空格,用gets
uq_49487142223 3年前 回复TA
#include <stdio.h>
int main()
{
    int i,y=0,s=0,k=0,q=0;
    char str[200];
    scanf("%s",str);
    for(i=0;str[i]!='\0';i++)
    {
        if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z'){
            y++;
        }
        else if(str[i]>='0'&&str[i]<='9') {
            s++;
        }
        else if(str[i]==' ') {
            k++;
        }
        else q++;
    }
    printf("%d %d %d %d\n",y,s,k,q);
    return 0;
}
为什么空格后输出不了,求大佬解析下