« 字符串反转 | Main | XML初探(一) »

删除数组中重复的数字

问题:一个动态长度可变的数字序列,以数字0为结束标志,要求将重复的数字用一个数字代替,例如:
将数组 1,1,1,2,2,2,2,2,7,7,1,5,5,5,0 转变成1,2,7,1,5,0

问题比较简单,要注意的是这个数组是动态的。所以避免麻烦我还是用了STL的vector。

#include <iostream>
#include <vector>
using namespace std;
//remove the duplicated numbers in an intger array, the array was end with 0;
//e.g. 1,1,1,2,2,5,4,4,4,4,1,0 --->1,2,5,4,1,0
void static remove_duplicated(int a[], vector<int>& _st)
{
	_st.push_back(a[0]);
	for(int i=1;_st[_st.size()-1]!=0;i++)
	{
		if(a[i-1]!=a[i])
			_st.push_back(a[i]);
	}
}

当然如果可以改变原来的数组的话,可以不用STL,仅需要指针操作就可以了。下面这个程序将修改原来数组的内容。

void static remove_duplicated2(int a[])
{
	if(a[0]==0 || a==NULL)
		return;
	int insert=1,current=1;
	while(a[current]!=0)
	{
		if(a[current]!=a[current-1])
		{
			a[insert]=a[current];
			insert++;
			current++;
		}
		else
			current++;
	}
	a[insert]=0;
}

TrackBack

TrackBack URL for this entry:
http://www.zhuxinquan.com/mt_zxq/mt-tb.cgi/76

Post a comment