c-循环删除列表中不起作用的匹配值



我写这段代码是为了删除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 & %dn", 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;
}

如果我理解正确,那么得到的数组应该是{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 & %dn", 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;
}

最新更新