问题描述:让用户随机输入一个字符串,然后用C语言实现对字符串里的字符分类,一般可分为 大写字母、小写字母、数字、空格、或者其它字符(标点符号%……*等)。
用户输入为:
qwe12SADCr1234,./;'
输出应为:
大写:4 小写:4 数字:6 其他:5
方法一:C语言的一个头文件<ctype.h>,定义了一批C语言字符处理函数,用于测试字符是否属于特定的字符类别,如字母字符、控制字符、数字、等等;例如c代表用户输入的一个字符,则有:
(1) isalpha(c);//判断c是否为字母,如果是返回非0,反之返回0;
(2) isdigit(c);//判断c是否为数字,如果是返回非0,反之返回0;
(3) islower(c);//判断c是否为小写字母,如果是返回非0,反之返回0;
(4) isupper(c);//判断c是否为大写字母,如果是返回非0,反之返回0;
…………
#include <stdio.h>
#include <ctype.h>
int main()
{
int Sletter = 0, Lletter = 0, number = 0,blank = 0,others = 0,c; //分别为大/小字母、数字、空格、其他
while((c = getchar()) != '\n')
{
if(isalpha(c)) //判断是否为大写字母
Sletter++;
if(isalpha(c)) //判断是否为小写字母
Lletter++;
else if(isdigit(c)) //判断是都为数字
number++;
else if(c == ' ') //判断是否为空格
blank++;
else //其他
others++;
}
printf("大写字母:%d 小写字母:%d 数字:%d 空格:%d 其他:%d\n",Sletter,Lletter,number,blank,others);
return 0;
}
方法二:直接通过ASCII码进行比较,大小写字母、数字的ASCII码都在某一个区间内,空格的ASCII码值也可以查到,然后用if语句进行判断即可。
#include<stdio.h>
int main()
{
int Sletter = 0, Lletter = 0, number = 0,blank = 0,others = 0,c; //分别为大/小字母、数字、空格、其他
while((c=getchar())!='\n')
{
if(c>='A'&&c<='Z')
{
Sletter++;
}
else if(c>='a'&&c<='z')
{
Lletter++;
}
else if(c>='0'&&c<='9')
{
number++;
}
else if(c==' ')
{
blank++;
}
else
others++;
}
printf("大写字母:%d 小写字母:%d 数字:%d 空格:%d 其他:%d\n",Sletter,Lletter,number,blank,others);
return 0;
}
知识点:
1、getchar()的作用是从缓冲区读走第一个字符,即,读完第一个字符之后,其他字符自动往前移一位
2、getchar()函数的返回值是用户输入的第一个字符的ASCII码,