问题:一个动态长度可变的数字序列,以数字0为结束标志,要求将重复的数字用一个数字代替,例如:
将数组 1,1,1,2,2,2,2,2,7,7,1,5,5,5,0 转变成1,2,7,1,5,0 问题比较简单,要注意的是这个数组是动态的。
======================
#include <iostream>
#include <vector>
using namespace std;
//使用标准容器
void Reduce(int *a,std::vector<int> &st)
{
st.push_back(a[0]);
for(int i=0;st[st.size()-1]!=0;i++)
{
if(a[i+1] != a[i])
st.push_back(a[i+1]);
}
//打印
std::vector<int>::iterator iter;
for(iter=st.begin();iter!=st.end();++iter)
cout<<*iter;
cout<<endl;
}
//直接操作指针
void Reduce1(int *a)
{
if(a==NULL||a[0]==0)
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;
for(int i=0;i<=insert;i++)
cout<<a[i];
cout<<endl;
}
int main(int argc,char *argv[])
{
std::vector<int>::iterator iter;
std::vector<int> st;
int a[] = {1,1,1,2,2,5,4,4,4,4,1,0};
//Reduce(a,st);
Reduce1(a);
return 1;
}