删除数组中所有特定元素,加在最后 (C++写的)

wodecaoxin 2009-02-25 12:15:14
假如全部删除0,并且加在最后:
例如:0,0,0,0,9 -》 9,0,0,0,09,0,0,0,9 -》9,9,0,0,0

现在我的算法是:先删除0,记录0的个数,加在最后。
贴出有问题的程序
邀请帮我改正,要求用for if goto break 等常见语句。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int l=0;
int a[]={9,0,0,9};
int n=sizeof(a)/sizeof(a[0]);
cout<<"n="<<n<<endl; //元素个数

for(int i=0;i<n;i++) //循环有点问题
{
if(a[i]==0)
{ l++;
for(int m=i;m<n-1;m++)
{
a[m]=a[m+1];

}
n--;
}
if(a[0]==0) //这里出问题了
{
i--;
}

}

for(int y=1;y<=l;y++)
{
a[n-y]=0;
}

cout<<"l="<<l<<endl;

for(int k=0;k<n;k++)
{
cout<<a[k]<<endl;
}
return 0;
}

...全文
202 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
uwinb 2009-02-25
  • 打赏
  • 举报
回复
#include <algorithm>

int main()
{
int a[]={9,0,0,9};
int *pa=remove(a, a+4, 0);
while (pa != a+4) {*pa=0; ++pa;}

for (int i=0; i<4; ++i) cout<<a[i];

}
ssff1 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ssff1 的回复:]

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int l=0;
int k=0;
int a[]={9,0,0,9};
int n=sizeof(a)/sizeof(a[0]);
cout < <"n=" < <n < <endl;
for (int j=0;j <n;j++)
{
if(a[j]!=0)
{
a[k]=a[j];
k++;
}
}
for(int p=k;p <n;p++)
{
a[p]=0;
}

for(int y=0;y <n;y++)
{
cout < <a[y] < <endl;
}
return 0;
}
[/Quote]
在你的基础上改的,
ssff1 2009-02-25
  • 打赏
  • 举报
回复

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int l=0;
int k=0;
int a[]={9,0,0,9};
int n=sizeof(a)/sizeof(a[0]);
cout<<"n="<<n<<endl;
for (int j=0;j<n;j++)
{
if(a[j]!=0)
{
a[k]=a[j];
k++;
}
}
for(int p=k;p<n;p++)
{
a[p]=0;
}

for(int y=0;y<n;y++)
{
cout <<a[y]<<endl;
}
return 0;
}
donle1000 2009-02-25
  • 打赏
  • 举报
回复
 for(int i=0;i <n;i++)  //循环有点问题 
{
if(a[i]==0)
{ l++;
for(int m=i;m <n-1;m++) //如9,0,0,9 你的操作是将检测到0的值用后面的值向前覆盖,那么数组的最后一个数没有操作,比如a[1]被覆盖,那么 //整个数组变为9,0,9,9
{
a[m]=a[m+1];

}
n--;
}


    if(a[0]==0)  //这里出问题了 
{ //如0,0,9,9 即使a[0] == 0的时候会经过上面的for循环覆盖掉,但是用于覆盖a[0]的a[1]也是0,那么再执行if语句的 //时候i--,下条语句中i的值就为-1了
i--;
}


我也是菜鸟,有说错的地方望以斧正

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧