C++的问题,情指点一下

来源:百度知道 编辑:UC知道 时间:2024/05/16 13:29:11
void ARR::Delsame()
{
int i, j;
for (i=0;i<m;i++)
{
if (a[i] == a[i+1])
{
for(j=i+1;j<m;j++)
{
a[j] = a[j+1];
}
m--;
i--;
}
}
}
是一个对已知的数组删除相同的元素的程序,他是怎么删的啊
? 好久没看明白了

void ARR::Delsame()
{
int i, j; 最好加上 j=0,不加其实也没什么关系
for (i=0;i<m;i++)
{
if (a[i] == a[i+1]) 通过i做下标,来判断是否后一个数等于前一个数
{ 如果相等则保留a[i],
for(j=i+1;j<m;j++)
{ 同时a[i]后面的数组向前移一位,相当与去掉了a[i+1]
a[j] = a[j+1]; j=i+1就是后面那个相同的数
}
m--; 数组元素减少,所以最大值减少
i--; 为重新比较a[i]和a[i+1]的关系,而for语句中的i++一旦执行就指向后一个数了,所以此时应先将i减小一个
}
}
}

这个程序实现的功能应是删除数组中相邻重复的元素,只保留一个

如0112->012

算法描述(初始化i=0)
1 第i位与下一位相同吗?
2 如果相同,将下一位删除,并将后续元素向前移一位,并将数组总长度减1,i也减1(因下次仍需从第i位开始,但循环结束时有i++,故在此做i--)
3 i++,如果第i位不是数组最后一个元素,则重复1