前言:使用C语言自定义一个函数,实现统计字符串中的种类及个数
首先,我们需要明白自定义函数需要实现的功能——统计字符种类和个数。我首先想到的是使用两个数组来存储字符和对应字符的个数,如
char kind[N];//存贮字符种类的数组
int num[N];//存贮对应字符的个数的字符
接下来学要做的就是编写功能实现的代码。我的解决方案是将待统计的字符数组中的元素一个一个的进行比较,以此来判断当前字符是否已存在于kind数组中,若已存在则该字符对应的计数数组元素加一,否则在kind数组中添加当前字符元素并在num数组对应位置赋一。
int i = 0, j = 0;//i为输入字符数组下标,j为kind数组中的下标
int chongfu = 0;//判断当前字符是否重复的标记
kind[0] = a[0]; num[0] = 1; //默认输入字符有至少一个,且把第一个字符纳入kind数组中,并把该字符计数赋一
for (i = 1; i <= N - 1; i++) {//循环提取输入字符
for (j = 0; j <= kindnum - 1; j++) {//循环判断kindnum次
if (kind[j] == a[i]) {//判断提取的输入字符与kind数组是否有重复
num[j] = num[j] + 1;//将判断成功的kind数字对应的计数加一
chongfu = 1;//将重复的标记赋值为1
break;//判断为有重复,跳出循环
}
chongfu = 0;//仍未重复,标记为0
}
if (chongfu == 0) {//重复标记为0则在kind数组中加一个新的字符种类
kind[kindnum] = a[i]; num[kindnum] = 1; kindnum++;//对新种类的字符纳入并计数加一
}
}
最后将统计代码放入待定义的函数中,至此便可完成。
#include <stdio.h>
#include <string.h>
#define N 11//gets_s()函数中N-1为可输入字符的个数,溢出会报错无法运行
char kind[N];
int num[N];//能力有限不知道如何处理有两个返还值的函数,故用全局变量以在main函数中加以使用
int kindnum = 1;//kindnum变量的功能为计数当前不同(种类)字符的个数
void stats(char a[N]) {//定义stats函数
int i = 0, j = 0;//i为输入字符数组下标,j为kind数组中的下标
int chongfu = 0;//判断当前字符是否重复的标记
kind[0] = a[0]; num[0] = 1; //默认输入字符有至少一个,且把第一个字符纳入kind数组中,并把该字符计数赋一
for (i = 1; i <= N - 1; i++) {//循环提取输入字符
for (j = 0; j <= kindnum - 1; j++) {//循环判断kindnum次
if (kind[j] == a[i]) {//判断提取的输入字符与kind数组是否有重复
num[j] = num[j] + 1;//将判断成功的kind数字对应的计数加一
chongfu = 1;//将重复的标记赋值为1
break;//判断为有重复,跳出循环
}
chongfu = 0;//仍未重复,标记为0
}
if (chongfu == 0) {//重复标记为0则在kind数组中加一个新的字符种类
kind[kindnum] = a[i]; num[kindnum] = 1; kindnum++;//对新种类的字符纳入并计数加一
}
}
}
void main() {
char a[N];
int i = 0, j = 0;
printf_s("请输入%d个字符:\n",N-1);
gets_s(a, N);//仅能键入不多于N-1个字符,否则报错
stats(a);//调用stats函数
for (i = 0, j = 0; i <= kindnum - 2 && j <= kindnum - 2; i++, j++) {
printf_s("%c:%d", kind[i], num[j]);
printf_s("\n");
}
}
调试结果如下图:
其实还可以对字符数组进行排序处理,使结果更易于阅读!
写在最后:新人初学C语言,如有错误还请各位指正。本篇文章以记录个人学习过程,还请见谅!