删除全为0的元素

来源:百度知道 编辑:UC知道 时间:2024/06/05 20:53:56
我写了一个程序,是删除一个数组里全为0的元素。不知道哪里错了
#include <stdio.h>
void shanchu(int *a,int n)
{
int i,t;
for(i=0;i<n;i++)
while(a[i]==0)
{ t=i;
for(i=t;i<n;i++)
a[i]=a[i+1]; }
printf("shan chu hou shu zu:\n");
for(i=0;i<n-1;i++)

printf("%d ",a[i]);
printf("\n");
}

void main()
{
int a[10]={1,3,3,2,0,1,1,5,0,0};
shanchu(a,10);

}

你调试一下,看看变量的变化情况,就知道了.不知道你想要用什么办法,不过你那个方法效率很低.
改好的:
int i,j;
for (i=0,j=0;i<n;++i,++j)
if (a[i]==0)
--j;
else
a[j]=a[i];
for (i=j;i<n;++i)
a[i]=0;

#include <stdio.h>
void shanchu(int *a,int n)
{
int i,t;
int sum = 0;
for(i=0;i<n;i++)
{
if(a[i]==0)
{ t=i;
for(i=t;i<n;i++)
{
a[i]=a[i+1];
}
i=t; //给i重新赋值
--i;
--n;
++sum;
}
}
printf("shan chu hou shu zu:\n");
for(i=0;i<(n-sum);i++)
printf("%d ",a[i]);
printf("\n");
}

void main()
{
int a[10]={1,3,3,2,0,1,1,5,0,0};
shanchu(a,10);

}

不好意思,有个逻辑错误刚才没发现,现在更正下

"for(i=t;i<n;i++)
a[i]=a[i+1]"
i=n-1的时候,循环还有,就是说a[n-1]=a[n]
没有a[n]这个数的。。
所以删除的算法本来就有问题

//vc++ 6.0调试通过

#include <stdio.h>