gpt4 book ai didi

c - 使用指针在 C 中删除重复项时出错

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:34 26 4
gpt4 key购买 nike

我的代码在尝试获取重复项并将其删除时出现错误。

然而,当我尝试这样做时,它并没有删除任何东西,并且在输出中仍然给我与原始值相同的值。

下面我展示了这两种方法。

void print_array 只是打印出数组。

void removeDups 我想要的是获取重复项并删除它们并打印新数组。

让我知道错误发生在哪里。

还建议使用指针表示法。谢谢你!

void removeDups(int *array, int *length)
{
*length = 10;
int i, j;
for(i = 0; i < *length; i++)
{
for(j = 0; j < *length; j++)
{
if(array[i] == array[j])
{
array[j] = array[*length-2];
length++;
}
}
}
printf("Number of new elements: %d,", *length);
printf(" new elements: ");
for(i = 0; i < *length; i++)
{
printf("%d " , array[i]);
}
}

void print_array(int *array, int length)
{
printf("Number of elements: %d,", length);
int i;
printf(" Orginal elements: ");
for(i = 0; i < length; i++)
{
printf("%d " , array[i]);
}
}
int main()
{
int array [10];
int i, number;
int size = 10;
int *length;
length = &size;
for(i = 0; i < size; i++)
{
number = rand() % 10 + 1;
array[i] = number;
}
print_array(array, size);
printf("\n");
removeDups(array, length);
return 0;
}

输出:

元素个数:10,原始元素:4 7 8 6 4 6 7 3 10 2

新元素个数:3,新元素:10 6 8

最佳答案

这部分

 if(array[i] == array[j])
{
array[j] == array[i];
length++;
}

没有意义。

array[j] == array[i];

表达式是比较。我想你想用

array[i] 影响到 array[j]
array[j] = array[i];

但你只是确认它们是一样的。
然后你增加 length,这很危险,在这种情况下毫无意义。

如果顺序不重要,将 array[j] 替换为 array[length - 1] 然后递减 length
如果顺序很重要,将每个值从 array[j + 1] 移动到 array[length - 1]array[j]array[length - 2],然后递减 length

同时删除

length = 10;

行。当您调用 removeDups 时,这里的 length 已经是 10,如果您使用较小的数组调用它,您将读取数组之外的内容。您也只需要将一个值与其后的值进行比较;当 array[i] 被比较时,它已经与 array[0]array[i - 1] 之间的所有值进行了比较.

for(i = 0; i < *length; i++)
{
for(j = i + 1; j < *length; j++)
{
if(array[i] == array[j])
{
array[j] = array[*length - 1];
(*length)--;
}
}
}

已编辑:Riiight,长度为 int*!

订购版本:

for(i = 0; i < *length; i++)
{
for(j = i + 1; j < *length; j++)
{
if(array[i] == array[j])
{
for (int k = j; k < *length - 1; ++k)
{
array[k] = array[k + 1];
}
(*length)--;
j--; //I forgot this, but once you moved all values array[j] will have been updated and you must compare it again.
}
}
}

或者按照 gsamaras 的建议使用辅助数组。

关于c - 使用指针在 C 中删除重复项时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58311976/

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