C++/C数组删除数据问题?
1.C++/C数组中删除重复数据:我的代码如下(运行出错)请大神指点一下:如何更改?
#include<iostream>
using namespace std;
int main()
{
int a[]={35,35,94,35,35,35,35,35};
int i,max,j,n=8,k;
for(i=0;i<n-1;i++)
{
max=a[i];
for(j=i+1;j<n;j++)
{
if(a[j]==max)
{
k=j;
for(;k<n;k++)
{
a[k]=a[k+1];
while(a[k]==max)
{
a[k]=a[k+1];
n=n-1;
}
}
n--;
}
}
}
for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;
return 0;
}
2.C++/C数组中先排序后删除重复数据:我的代码如下,请问大神我的代码有没有问题?
#include<iostream>
using namespace std;
int main()
{
int a[]={35,35,35,35,35,35,84,35};
int i,j,max,t;
for(i=0;i<7;i++)
{
max=i;
for(j=i+1;j<8;j++)
{
if(a[j]>a[max])max=j;
}
if(i!=max){t=a[max];a[max]=a[i];a[i]=t;}
}
for(i=0;i<8;i++)cout<<a[i]<<" ";cout<<endl;//排序
int n=8;
for(i=0;i<n-1;i++)
{
max=a[i];
while(max==a[i+1])
for(j=i+1;j<n;j++)
{
if(a[j]==max)
{
for(;j<n;j++)
{a[j]=a[j+1];}
n--;
}
}
}
for(i=0;i<n;i++)cout<<a[i]<<" ";
return 0;
} c++
[解决办法]
你执行一遍就知道有没有问题了,不是你期望的结果你接跟踪调试,不要抱着一上来就问我的程序有没有问题。这个习惯不好。
还有你的代码风格不好,注意!!
还有一个问题就是你这个事一个数组不是链表怎么删除数据呢,
这里提供一个思路,你再加个数组或者使用Vector
把a[1]作为第一个待查数据,遍历一遍数组如果找到和a[1]不相等的你就放在另一个数组里然后把这个下标的的数设置为a[i] = a[i]
当遍历结束时你把a[1]放到另一数组里就行了,这样就达到你的要求了。
当然还有很多解决方法,我觉得能用最简单的方法达到你想要的结果是最好的,在这个基础上你在去考虑算法之类的东西。
遇到问题多跟踪代码,你会收获颇丰。
[解决办法]
经过程序跟踪,可以确定第一段代码在while循环处,陷入了死循环;第二段代码,貌似是没有问题。
建议以后这种问题,最好自己亲自调试一下,这样可以学到很多东西,自己实在解决不了的,在问别人。
[解决办法]
补充一下,数组中元素删除后,下标要前移,最好用链表