注册 登录
编程论坛 C++教室

删除数组中重复的数据

tszhao 发布于 2008-03-21 08:07, 4356 次点击
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
    int i,j,a[10];
    void del(int *p,int n);
    srand(time(0));
    for(i=0;i!=10;++i)
        a[i]=rand()%10+1;
    for(i=0;i!=10;++i)
        cout<<a[i]<<" ";
    cout<<endl;
    del(a,10);
    return 0;
}
void del(int *p,int n)
{
    int i,j,k;
    for(i=0;i!=n-1;++i)
        for(j=i+1;j!=n;++j)
            if(p[i]==p[j])
            {
                for(k=j;k!=n-1;++k)
                    p[k]=p[k+1];
                n--;
            }
            for(i=0;i!=n;++i)
                cout<<p[i]<<" ";
            cout<<endl;
}
运行的时候,有时候正确,有时候又有错误!~到底哪里有问题?
7 回复
#2
sunkaidong2008-03-21 09:02
这种题目这个星期就写了好多便了...自己找啊昨天还写过...
#3
zjl1382008-03-21 10:02
for(i=0;i!=n-1;++i)
        for(j=i+1;j!=n;++j)
这里不行吧。如果最后两数相等,就不能达到效果了!
#4
zm19862008-03-22 21:49
如果一个数和后面连续的两个数相等,就会只删除前一个数,后一个数不再比较,因为++j了
还有就是如果最后两个数相等,设此次循环的n=n1,i=n1-2,j=n1-1时,p[i]==p[j],再执行n--,i++,此时n=n1-1,i=n1-1
则在下一次循环中i!=n-1,即(n1-1)!=(n1-1)-1,从此无限循环下去,
我能看到的就这些,不知道对不对
#5
sunkaidong2008-03-22 21:57
#include"stdio.h"
#include"string.h"
int main()
{
    char c[100];
    char *p;
    char a[300];
    memset(a,0,sizeof(a));

    gets(c);
    p=c;
    do
    {
        if(a[*p]++>0)
        {
            strcpy(p,p+1);
        }
        else
            p++;
    }while(*p);
    puts(c);
}
#6
sunkaidong2008-03-22 21:57
不考虑效率我的比较简洁..好好看书...加油
#7
aipb20072008-03-23 04:09
use STL

sort() & unique() or sort() & unique_copy()
#8
sunkaidong2008-03-23 09:25
泛性算法用起来还是要磨合的...呵呵...
1