栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号