【发布时间】:2016-12-05 21:53:58
【问题描述】:
我想做一个从数组中删除元素的函数。
我尝试自己制作该功能,但并未完全成功:
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
谢谢
【问题讨论】:
-
array_length是remove_element的本地。但是,您在函数内部进行操作将不会在函数外部可见。如果您希望其操作在函数范围之外持续存在,则需要传入指向array_length的指针。 -
对于问题 #2:
if(array[i]==number){=>while(array[i]==number){ -
j<array_length-->j<array_length-1 -
可以使用返回值作为数组的新长度:
array_length = remove_element(A, number, array_length);或通过其地址remove_element(A, number, &array_length) -
有多少相同的数字并不重要,在上述情况下,如果用户想要删除 1,则应删除所有 1 。由于让-弗朗索瓦·法布尔(Jean-François Fabre)解决了这个问题,但仍然无法绕过长度......