gpt4 book ai didi

从 C 中的数组创建一个没有重复整数的新数组

转载 作者:行者123 更新时间:2023-12-01 08:21:22 26 4
gpt4 key购买 nike

我被要求创建一个没有重复整数的新数组。

我想我在我的代码中犯了一个错误,但没有注意到任何错误。

“1, 2, 1, 2, 1, 4”的输出是“1, 2, 2, 4”。

应该是“1,2,4”

想了解我的错误。

    // Exercise 2 - 
void Ex2() {
int i, counter = 1, size = -1;
int* array = input_dynamic_array(&size);
int* newArr = (int*)malloc((size)* sizeof(int));
newArr[0] = array[0];
assert(array);
for (i = 1; i < size; i++) {
if (!find_num_in_newArr(newArr, size, array[i])) {
newArr[counter++] = array[i];
}
}
newArr = (int*)realloc(newArr, (counter)*sizeof(int));
printArray(newArr, counter);
free(array);
free(newArr);
}

bool find_num_in_newArr(int *newArr, int size, int num) {
int i;
for (i = 0; i < size; i++) {
if (newArr[i] == num) {
return true;
}
return false;
}
}

int* input_dynamic_array(int *size)
{
int *array;
int ii;
printf("Enter array size: ");
scanf("%d", size);
array = (int*)malloc((*size) * sizeof(int));
assert(array);
printf("Enter %d integer numbers: ", *size);
for (ii = 0; ii < *size; ii++)
scanf("%d", array + ii);
return array;
}

最佳答案

我在这里看到一个问题:

for (i = 0; i < size-1; i++) 
{
if (newArr[i] == num)
{
return true;
}
return false;
}

这将永远不会有另一个迭代。它将从第一次迭代返回 truefalse。当您使用循环时,这不是您计划的。

根据您的设计,您可能希望将 return false; 移到循环之外。

另一个建议,Don't cast the return value of malloc, its pointless .

此外,

int* newArr = (int*)malloc((size)* sizeof(int));

这之后需要进行检查。您需要检查 malloc 是否返回了 NULL。如果是,则不会分配内存,任何基于 newArr 的修改都会很糟糕。

一种相对简洁的方法是使用如下所示的函数:

int RemoveDuplicates(int* Arr, int length)
{
int i = 0, j = 0;
int LengthChanged = 0;

for (i = 1; i < length; i++)
{
for(j = 0; j < LengthChanged ; j++)
{
if(Arr[i] == Arr[j])
break;
}

// Copy as is if there is not duplicate element in the array
if (j == LengthChanged )
Arr[LengthChanged++] = Arr[i];
}

return LengthChanged;
}

关于从 C 中的数组创建一个没有重复整数的新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50272107/

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