#define _CRT_SECURE_NO_DEPRECATE 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#define NUM 10//数组初始大小
//判断是否是大写字母
bool _CapitalLetters(char c)
{
if (c >= 'A' && c <= 'Z')
{
return true;
}
return false;
}
//判断是否是小写字母
bool _LowercaseLetters(char c)
{
if (c >= 'a' && c <= 'z')
{
return true;
}
return false;
}
//判断是否是数字
bool _Digital(char c)
{
if (c >= '0' && c <= '9')
{
return true;
}
return false;
}
int main()
{
int n = 0;//当前数组元素个数
int max = NUM;//当前数组最大值
char* buff = malloc(sizeof(char)*NUM);
if (buff == NULL)
{
perror("创建数组失败buff");
exit(-1);
}
int CapitalLetters = 0;//大写字母
int LowercaseLetters = 0;//小写字母
int Digital = 0;//数字
int Len = 0;//字符串长度
int Other = 0;//其他
printf("请输入字符串:");
char c;//临时字符
while (c=getchar())//获取一个字符
{
if (n==max)//当元素满了时候
{
char* p = realloc(buff, 2 * max);//扩容数组为两倍
if (p == NULL)
{
perror("扩容失败");
exit(-1);
}
else
{
buff = p;//获取扩容后的指针
max = 2 * max;//扩容为两倍
}
}
if (c == '\n')//获取到换行标志退出循环
{
buff[n] = '\0';//打上字符串结尾标志
break;//字符串输入完成
}
else
{
buff[n] = c;//将元素放入数组
}
n++;//元素+1
}
Len = strlen(buff);//求字符串长度
for (size_t i = 0; i < Len; i++)
{
if (_CapitalLetters(buff[i]))//判断大写字母
{
CapitalLetters++;
}
else if (_LowercaseLetters(buff[i]))//判断小写字母
{
LowercaseLetters++;
}
else if (_Digital(buff[i]))//判断是否是数字
{
Digital++;
}
}
Other = Len - CapitalLetters - LowercaseLetters - Digital;//计算其他字符
printf("字符串长度:%d\n大写字母个数:%d\n小写字母个数:%d\n数字个数:%d\n其他字符个数:%d\n",Len, CapitalLetters, LowercaseLetters, Digital, Other);
free(buff);//释放内存空间
buff = NULL;
return 0;
}