【问题标题】:Loop to delete matching values in a list not working循环删除列表中的匹配值不起作用
【发布时间】: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&lt;count; j++)。你能解释一下为什么你从i+1开始吗?如果你修复了那个循环的开始状态,你的程序就可以工作了。
  • @AlanBirtles 非常感谢,它确实有效!这在逻辑上是不正确的。我从删除同一列表中的重复值开始。我基本上忘记了这部分应该改变。一个愚蠢的错误。但是非常感谢!

标签: c loops for-loop


【解决方案1】:

如果我理解正确,结果数组应该是{7,8}

然后,我认为创建一个新数组会更容易。请注意,结果数组的最大大小可以是 arr2 的大小。 (即根本没有匹配时)

#define SIZE 8

int main() {
    int arr[]={1,2,3,4,5};
    int arr2[]={1,1,2,3,2,5,7,8}; 
    int count = 8;
    int result[SIZE];
    int k = 0;
    
    for (int i = 0; i < count; i++)
    {
        int has_dup = 0;
        for (int j = 0; j < 5; j++)
        {
            if (arr2[i]==arr[j])
            {
                printf("\nMATCH FOUND %d & %d\n", arr2[i], arr[j]);
                has_dup = 1;
                break;
            }
        }
        if (has_dup == 0)
            result[k++] = arr2[i];
    }

    for(int i = 0; i < k; i++)
    {
        printf("No: <%d>\n", result[i]);
    }
    
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多