【初学C语言】统计字符串中的字符种类及个数

本文介绍如何使用C语言编写函数,通过字符数组和计数数组实现统计输入字符串中不同字符的种类和出现次数,适合初学者理解基本数据结构和算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:使用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语言,如有错误还请各位指正。本篇文章以记录个人学习过程,还请见谅! 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值