我想创建一个从数组中删除元素的函数。
我尝试自己制作这个函数,但是没有完全成功:
void remove_element(int* array, int number, int array_length)
{
int i, j;
for (i = 0; i < array_length; i++){
if (array[i] == number) {
for (j = i; j < array_length; j++)
array[j] = array[j+1];
array_length--;
}
}
}
我注意到的第一件事是在 main 中调用函数后,array_lenght
没有改变,因此删除元素后数组的长度保持不变。
那么第一个问题是如何在 void 函数中改变数组的长度?
第二个不能正常工作的是,如果数组中有两个或更多相同的数字彼此相邻,例如,如果数组包含 1,1,3,4,5,6
并且用户想要删除 1
函数将只删除一个元素。
我的输出示例(错误):
1,1,3,4,5,6 after fucntion 1,3,4,5,6
谢谢
最佳答案
在当前的签名中你不能修改数组,因为返回新的数组你还需要返回新的长度。
有很多方法可以做到,这里是一个单循环的方法:
void
remove_element(int* array, int number, int *array_length)
{
int i, j;
for (i = 0, j=0; i < *array_length; i++) {
if (array[i] != number)
array[j++] = array[i];
}
*array_length = j;
}
这样做,这将同时改变初始数组和在调用者中保持其长度的变量,并且您必须通过引用传递 array_length 的值,例如
int* some_array, some_array_length, n;
remove_element(some_array, n, &some_array_length)
其他方法是返回新长度并改变数组或在堆中分配一个新数组并返回分配的数组和新长度。
关于c - 无效函数 : removing elements from an array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984047/