每天一个小程序(13)——统计字符个数

这篇博客介绍如何统计字符串中每个字符的个数。首先提出通过建立结构体存储字符及其计数的方法,然后讨论了好友提出的优化方案:先按ASCII值排序字符串,再遍历一次即可得出结果。文章提供了相关代码实现。

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

统计字符个数

任意输入一个字符串,统计字符串中每种字符的个数,并输出。

最开始我的想法是,建立一个结构体,这个结构体包含两个部分,一个用来保存字符c,另一个保存字符出现的次数count。然后在遍历字符串的过程中,将字符逐个插入到这个结构体数组中,并记录出现的次数,第一次碰到的字符就插入到数组中,并且初始count为1,第二次出现的字符就直接count加1.

后来我的好友雷锋的另一个算法我觉得不错,并且能够更快的输出,即先对这个字符串进行排序,排序的依据为ASCII值,然后只需遍历一遍,就可以将这个字符以及出现的次数计算出。


下面是代码

#include <stdio.h>
#include <algorithm>

#define NUM 100

struct Data
{
	char ch;
	int count;
}data[NUM];

void print(char str,int count)//打印至屏幕,主要是为了显示“空格”
{
	if(str == 32)
		printf("%s : %d\n","空格",count);
	else
		printf("%c : %d\n",str,count);
}
void count(char str[],int n)
{
	char *temp = str;
	std::sort(temp,temp+n);//进行排序
	char a1,a2;
	int count = 0;
	int num = 0;
	a1 = temp[num++];
	count++;
	while(num <= n)
	{
		a2 = temp[num++];
		if(a1 == a2)//碰到相同的 count加1
		{
			count++;
		}
		else//碰到不同的,输出字符和count,并记录新的字符
		{
			print(a1,count);	
			a1 = a2;
			count = 1;
		}
	}
}

void main()
{
	char str[NUM];
	printf("请输入字符串:\n");
	gets(str);
	int len = strlen(str);
	count(str,len);
}


PS:这个程序是区分大小写的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值