题目:输入一个字符串,找出其中的大写字母、小写字母、数字、空格和其它字符各有多少。
#include<stdio.h>
#include<malloc.h>
#include<string.h>
需要引的头文件,由于使用malloc 开辟空间要引用malloc.h,使用strlen引用string.h
void menu() //打印菜单
{
printf("****** 0:退出 *********\n");
printf("****** 1:计算大写字母数 *********\n");
printf("****** 2:计算小写字母数 *********\n");
printf("****** 3:计算空格数 *********\n");
printf("****** 4:计算其他字符数 *********\n");
}
int findcap(char* arr, int sz) //寻找大写字母的函数
{
int a, ret = 0;
for (a = 0; a < sz; a++)
{
if (arr[a] >= 'A' && arr[a] <= 'Z')
{
ret++;
}
}
return ret;
}
int findmin(char* arr, int sz) //寻找小写字母的函数
{
int a, ret = 0;
for (a = 0; a < sz; a++)
{
if (arr[a] >= 'a' && arr[a] <= 'z')
{
ret++;
}
}
return ret;
}
int findspa(char* arr, int sz) //寻找空格字符的函数
{
int a, ret = 0;
for(a = 0; a < sz; a++)
{
if (arr[a] == ' ')
{
ret++;
}
}
return ret;
}
int findoth(char* arr, int sz) //寻找其他字符的函数
{
int a, ret = 0;
for (a = 0; a < sz; a++)
{
if ((arr[a] < 'A' || (arr[a] > 'Z' && arr[a] < 'a') || arr[a] > 'z') && arr[a] != ' ')
{
ret++;
}
}
return ret;
}
这是自己编写的函数,一个用于打印菜单供用户选择和四个实现寻找大写字符,小写字符,空格字符和其他字符的函数;
int main()
{
int number, flat, input, sz, ret, capital, minuscule, other, space;
char* arr;
int (*find[5])(char*, int) = {0, findcap, findmin, findspa, findoth}; //5个指针数组指向0和四个函数
printf("输入你要输入的字符个数:");
scanf("%d",&number);
arr = (char*)malloc(number * sizeof(char)); //创建一个动态数组
getchar();
printf("输入判断的字符:");
gets(arr);
sz = strlen(arr);
menu();
while (1)
{
printf("输入你想实现的功能:");
scanf("%d",&input);
if (input > 0 && input <= 4)
{
ret = (*find[input])(arr, sz);
printf("有 %d 个\n",ret);
}
else if (input == 0)
{
break;
}
else
{
printf("输入错误\n");
}
}
free(arr);
return 0;
}
这是主函数段;
首先让使用者预估自己要输入的字符串数,根据长度使用malloc开辟一个内存
void* malloc (size_t size)
输入的参数是无符号整形(以字节为单位),返回的是void*(开辟内存的首地址),在程序中将其转化为char*。
由于四个函数要传的参数都是字符指针和一个整形,将其放入一个函数指针数组中,,如下,定义一个包含五个元素的数组,每个元素都是指向函数的指针,函数名=函数地址,将其作为元素放入这个数组中,这样便于调用,这样可以缩减代码,避免代码杂糅
int (*find[5])(char*, int) = {0, findcap, findmin, findspa, findoth};