C语言两个数组比较去掉相同元素,数组元素个数不变
时间: 2024-09-10 22:18:22 浏览: 49
在C语言中,要比较两个数组并去掉相同元素,同时保持元素个数不变,可以通过以下步骤实现:
1. 遍历第一个数组的每个元素。
2. 对于第一个数组中的每个元素,再遍历第二个数组,检查是否存在相同的元素。
3. 如果在第二个数组中找到与第一个数组相同的元素,则将该元素从第二个数组中删除。这通常需要移动数组元素以覆盖要删除的元素,或者使用一个标记来表示该位置的元素已经被删除。
4. 由于元素个数不变,我们实际上不是删除元素,而是将不同的元素移动到数组的前面。
下面是一个简单的示例代码,用于比较两个数组并移除第二个数组中的相同元素:
```c
#include <stdio.h>
void removeCommonElements(int arr1[], int arr2[], int len1, int len2) {
for (int i = 0; i < len2; ++i) {
for (int j = 0; j < len1; ++j) {
if (arr1[j] == arr2[i]) {
// 从第二个数组中移除元素,即将后面的元素前移
for (int k = i; k < len2 - 1; ++k) {
arr2[k] = arr2[k + 1];
}
// 将最后一个元素置为0或其他标记值,表示该位置元素已被处理
arr2[len2 - 1] = 0; // 或者可以使用其他值或者方法来标记
// 因为我们不改变数组长度,所以减小len2来模拟删除操作
len2--;
i--; // 由于当前元素已经比较过,需要再次比较新移动到当前位置的元素
break; // 如果找到相同的元素,则跳出内层循环
}
}
}
}
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {3, 4, 5, 6, 7};
int len1 = sizeof(arr1) / sizeof(arr1[0]);
int len2 = sizeof(arr2) / sizeof(arr2[0]);
removeCommonElements(arr1, arr2, len1, len2);
printf("第一个数组: ");
for (int i = 0; i < len1; i++) {
printf("%d ", arr1[i]);
}
printf("\n第二个数组: ");
for (int i = 0; i < len2; i++) {
if (arr2[i] != 0) { // 排除标记值
printf("%d ", arr2[i]);
}
}
printf("\n");
return 0;
}
```
这段代码在移除第二个数组中的相同元素时,使用0来标记被移除的元素,因为数组的长度保持不变,所以我们在处理完所有相同元素后,仍然可以遍历到数组的末尾。
阅读全文