c语言,对一个数组,相同的元素进行删除,仅保留一个,不同的保留

编写函数,其功能是删除一维数组中所有相同的数字,使之只剩下一个。例:一维数组中存放的数据是: 2 2 2 3 4 4 5 5 6 6 6 6 7 7 8 8 9 10 10 10,

删除后数组中的内容为 2 3 4 5 6 7 8 9 10

文章目录

  • 因为数组元素不能删除,置换为0
  • 发现一个相同的元素,利用 a[t] = a[t+1]从后往前覆盖
  • 不知道有多少个相同的,建议用while循环
  • 每一次覆盖,都要对最后的元素置0处理


前言

函数可以返回数组删除后的长度,方便遍历不打印置0的元素


代码如下(示例):函数代码:

int dele(int a[],int n){
    int i,j,t,c = 0,m,flag,len = n-1;
    for( i =0 ;i < len; i++){
        do{    
            for(j = i+1,flag = 0;j < len+1;j++){
                if(a[i] == a[j]){
                    for( t =i ;t < n-1; t++){
                        a[t] = a[t+1];
                    }
                    a[n-++c] = 0;
                    len--;
                    flag = 1;
                    break;
                }
            }
        }while(flag);
    }
    return len;
}

2.主函数

代码如下(示例):

void main(){
    int a[N] = {1,1,0,3,0},m,len;
    
    printf("删除前:\t");
    for(m = 0;m<N;m++)
        printf("%d  ",a[m]);
    
    len = dele(a,N);
    
    printf("\n删除后:\t");
    for(m = 0;m<len+1;m++)
        printf("%d  ",a[m]);
}

运行效果

删除前:        1  1  0  3  0
删除后:        1  3  0
--------------------------------
Process exited after 0.01425 seconds with return value 3
请按任意键继续. . .


总结

新手,想了好久,期待大佬交流改进

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值