统计不同字符个数(类似去重复)

 HJ10 字符个数统计
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),
换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。  a,a,a输出1

方法一:不细讲

#include<stdio.h>
#include<string.h>
int redo(char* arr)
{
	int n = strlen(arr);
	int i = 0, j = 0;
	for (i = 0; i < n; i++)
	{
		for (j = i + 1; j < n; j++)
		{
			if (arr[i] == arr[j])
			{
				int k = 0;
				for (k = j; k < n-1; k++)
				{
					arr[k] = arr[k + 1];
				}
				n--;
				j--;
			}
		}
	}
	return n;
}
int main()
{
	char arr[550] = { 0 };
	gets(arr);
	int n = redo(arr);
	printf("%d", n);
	return 0;
}

方法二:(在网上看到的,觉得写的好好)

不同的字符有不同的ASCIl码值,我们将字符对应的ASCII码值(整形数据)作为数组的下标存放字符
 遇到相同的字符无变化(还是存储在数组相同的ASCII值作为下标的位置上),遇到不同的字符就存放在不同的位置(ASCII值不同,下标也就不同)

* HJ10 字符个数统计
* 编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),
  换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。  a,a,a输出1
*/

/*
* 思路:不同的字符有不同的ASCII码值,我们将字符对应的ASCII码值(整形数据)作为数组的下标来存放字符
* 遇到相同的字符无变化(还是存储在数组相同的ASCII值作为下标的位置上),遇到不同的字符就存放在不同的位置(ASCII值不同,下标也就不同)
*/
#include<stdio.h>
#define size 128   //因为ASCII码范围在0~127,有128个 
int main()
{
	char chars = 0;
	char arr[128] = { -1 };      //因为ASCII码值没有-1,只有0~127
	int sign = 0;
	while (scanf("%c", &chars)!=EOF)
	{
		if (chars == '\n')
		{
			break;
		}
		else
		{   //arr[(int)chars]的意思是将字符变量chars存放的字符强制类转换成整形数据作为数组下标
			if (arr[(int)chars] != chars)   //字符不相同的话
			{
				arr[(int)chars] = chars;    //将字符对应的ASCII码值(整形数据)作为数组的下标来存放字符
				sign++;
			}
		}
	}
	printf("%d", sign);
	return 0;
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值