【发布时间】:2022-01-14 01:01:04
【问题描述】:
我编写了这段代码来删除 arr2 中与 arr 的元素匹配的所有元素。谁能帮我理解我哪里出错了?
int main() {
int arr[]={1,2,3,4,5};
int arr2[]={1,1,2,3,2,5,7,8};
int count = 8;
for (int i=0; i<5; i++)
{
for (int j=i+1; j<count; j++)
{
if (arr[i]==arr2[j])
{
printf("\nMATCH FOUND %d & %d\n", arr[i], arr2[j]);
for(int k=j; k<count-1; k++)
{
arr2[k] = arr2[k+1];
printf("After deletion %d", arr2[k]);
}
count--;
}
j--;
}
}
printf("\nCount: <%d>\n", count);
for(int i=0; i<count; i++)
{
printf("No: <%d>\n", arr2[i]);
}
return 0;
}
【问题讨论】:
-
第二个循环很有趣。你说在顶部
j++,然后在底部j--。有什么想法? -
j--是否应该在if块内? -
@Passerby 那是因为如果我删除索引 j 处的元素然后转到下一个索引,我不需要增加索引值,对吗? @AlanBirtles 我也尝试将
j--放入if块中。我仍然收到错误的回复。 -
@AlanBirtles 是对的,都是一样的。您的另一个错误是
for (int j=i+1; j<count; j++)。你能解释一下为什么你从i+1开始吗?如果你修复了那个循环的开始状态,你的程序就可以工作了。 -
@AlanBirtles 非常感谢,它确实有效!这在逻辑上是不正确的。我从删除同一列表中的重复值开始。我基本上忘记了这部分应该改变。一个愚蠢的错误。但是非常感谢!