gpt4 book ai didi

c++ - 无法删除数组中的迭代

转载 作者:搜寻专家 更新时间:2023-10-31 02:23:41 25 4
gpt4 key购买 nike

在此代码中,我试图从数组中删除所有出现的指定值。函数应采用三个参数,数组、数组长度和要搜索的值。每次找到值时,都应移动数组以删除该值。

这是我目前所拥有的:

void arrayShift(int arr[], int length, int value){
for(int i = 0; i<length; i++)
{
if(arr[i] == value)
{
for (int k = i; k<length ; k++)
{
arr[k] = arr[k+1];
}
arr[length-1] = 0;
}
}
}

当使用这些值时,代码成功:

int inputarray[] = {10,20,30,40,50,10};
int length = 6;
int value = 10;
//output: 20 30 40 50

int inputarray[] = {6, 7, 8, 9};
int length = 4;
int value = 6;
//ouput: 7 8 9

int inputarray[] = {10,20,30,40,50,60};
int length = 6;
int value = 70;
//output: 10 20 30 40 50 60

但是,代码在以下情况下不起作用:

int inputarray[] = {9,8,9,9,9,9,6}; 
int length = 7;
int value = 9;
//what I get: 8 9
//what I want: 8 6

我似乎无法弄清楚为什么我的代码在进行迭代时会失败。

最佳答案

扫描数组并将不同于value的项复制到数组的开头。
变量 j 是复制目标索引,因此它会在每次复制时递增。
j 的最终值是复制项的数量,即结果数组长度 - 返回它,以便调用者知道它可能使用 arr[] 的哪一部分。

int arrayShift(int arr[], int length, int value){
int j = 0;

for(int i = 0; i<length; i++)
if(arr[i] != value)
arr[j++] = arr[i];

/* you may also zero the tail of array,
but it doesn't seem necessary if you return j
*/
for(i=j; i<length; i++)
arr[i] = 0;

return j; // new length
}

关于c++ - 无法删除数组中的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29027361/

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