1.1删除序列中相同的数

/*********************************************
*
*		c++程序设计实践指导 
*
*		1.1删除序列中相同的数
*
**********************************************/

#include <iostream>
using namespace std;
class ARR
{
	int m;		//数组实际元素个数
	int *p;		//存放原始数组及结果数组		
	int *c;		//存放记录数据重复次数的数组
public:
	ARR (int x[],int size)		//构造函数,用size初始化m,用参数x初始化p
	{
		m = size;		
		p = new int[size];
		c = new int[size]();		//数组每个元素初始化为0
		for (int i = 0; i < m; i++)
		{
			p[i] = x[i];
		}
	}
	void delsame();		//完成删除相同数据的功能
	void show()		//输出到屏幕显示
	{
		for (int i = 0; i < m; i++)
		{
			cout << p[i] << "\t";
		}
		cout << endl;
	}
	void count();		//完成统计每个数据重复此处并输出到屏幕的功能
};

void ARR::delsame()		//删除相同数据
{
	int i,j;
	for(i = 0; i < m-1; i++)
	{
		if(p[i] == p[i + 1])		//若存在相同数据,则之后数据向前覆盖
		{
			for(j = i+1; j < m-1;j++)
				p[j] = p[j+1];
			m--;
			i--;		//存在覆盖后仍然有重复数据的可能,故要从当前i继续判定
		}
	}
	cout << endl;
}
void ARR::count()		//统计每个数据的重复次数
{
	int i,j;
	int k = 0;
	for(i = 0; i < m; i++)
	{
		if(p[i] == p[i+1])		//若存在相同数据,则之后数据向前覆盖
		{
			c[k] += 1;
			for(j = i+1; j < m; j++)
				p[j] = p[j+1];
			m--;
			i--;		//存在覆盖后仍然有重复数据的可能,故要从当前i继续判定
		}
		else
		{
			c[k] += 1;		//按照日常计数习惯,为每个元素值加1
			cout << c[k] << "\t";
			k++;
		}
	}
	cout << endl;
}
int main()
{
	int b[16] = {1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10};		
	ARR v(b, sizeof(b)/sizeof(b[0]));
	v.show();		//显示原数组
	v.delsame();
	v.show();		//显示结果数组
	ARR w(b,sizeof(b)/sizeof(b[0]));
	w.count();		//显示统计数组
	system("pause");
	return 0;
}

转载于:https://my.oschina.net/u/862938/blog/110414

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值