gpt4 book ai didi

c - C中删除数组的第n个元素

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:18 25 4
gpt4 key购买 nike

如何删除数组中的每第 n 个元素?
对于 exp:我有数组 a[]={2,12,4,5,67,33,24,45,6,1};
我想删除每个第 3 个元素,以便结果数组为 a[]={2,12,5,67,24,45,1};
我知道如何在一个地方删除一个元素,但我找不到在每第三个地方删除该元素的方法。
所以我尝试了这样的事情:

int n,i;
double *a;
printf("Enter number of elements: ");
scanf_s("%d",&n);

a = (double*)malloc(100*sizeof(n));
printf("Enter the elements: ");
for( i=0;i<n;i++) {
scanf_s("%d",&a[i]);

}

for( i=0;i<n;i++) {
printf("%d ",a[i]);

}

for(i=0;i<n;i++){
for ( i = 3 - 1 ; i < n - 1 ; i++ ){
a[i] = a[i+1];
}
}

printf("\nResultant array is\n");

for( i = 0 ; i < n - 1 ; i++ )
printf("%d\n", a[i]);

并且我不需要任何特定的方式来执行此操作,它可以在同一个数组中或在一个新数组中。

最佳答案

不,我不会为您编写代码,但肯定可以为您提供一些指示

首先,如果您尝试修改同一个数组,那将是一项艰巨的任务。在每次删除(有值(value)的,而不是元素本身,为了迂腐)之后,您需要移动每个剩余的元素。相反,我建议,

  1. 创建另一个数组。
  2. 使用循环,开始从源数组中逐个元素地复制。
  3. 检查每个 n 索引的出现,跳过存储该索引值。
  4. 完成后,您将获得修改后的数组。

TL;DR您需要一个循环来完成您的工作。

[原始答案结束]


编辑:

您的代码片段错误的原因有很多,比如

  1. a 是指向 double 的指针,类似语句

    a = (double*)malloc(100*sizeof(n));

    是错误的,因为
    1.1. sizeof(n) 告诉你 sizeof(int) 但实际上它应该是 sizeof(double)
    1.2. see why not to cast cmalloc() 和 family 的返回值。

    应该写成

    a = malloc(100*sizeof*a);
  2. 向用户询问大小 并在固定大小 变量中输入是非常危险的。如果用户输入的大小大于分配的大小,您的程序就会崩溃。

  3. 对嵌套循环使用相同的标识符很可能是错误的,就像您的情况一样。

最后,恕我直言,只有在编译时分配大小未知时才使用动态内存。如果您要以固定方式分配动态内存(如上面的代码),它实际上是没有用的。

关于c - C中删除数组的第n个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31184439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com