我的C程序的目的是采取两个阵列(均包括唯一号码)并合并他们两个到一个新的数组,消除是两者之间的相同的任何数字。然而,当我尝试合并两个,它来代替打印回两个阵列组合,而不排除任何重复。
我的程序在从“array_A”的元素首先将创建“array_C”。然后,它会检查是否有使用计数器变量“array_B”和“array_C”之间重复。对于“array_C”每一个值的for循环检查,如果“array_B”值不等于“array_C”的值时,计数器加1。如果在“array_C”所有的值之后进行检查的降低,计数器<= 0,这意味着不存在该值的副本在“array_C”,它应该被添加到“array_C”的结束。我跟踪这个使用“位置”变量。
//Creation of array_C
int length_C = length_A + length_B;
int array_C[length_C];
//Copying array_A to array_C
for (i = 0; i < length_A; i++) {
array_C[i] = array_A[i];
}
//Checking array_C against array_B for duplicates
counter = length_A;
int position = length_A;
for (i = 0; i < length_B; i++) {
for (j = 0; j < length_C; j++) {
if (array_B[i] != array_C[j]) {
counter--;
} else {
counter++;
}
}
//this is the position tracker to add new value in array_C
if (counter <= 0) {
array_C[position] = array_B[i];
position++;
}
}
如果我进入了这个:
Enter the length of array 1: 6
Enter the elements of the array: 1 2 3 4 5 6
Enter the length of array 2: 6
Enter the elements of the array: 3 4 5 6 7 8
我所期望的结果应该是这样的:
Here is the merged array:
1 2 3 4 5 6 7 8
但是,相反,它看起来像这样:
1 2 3 4 5 6 3 4 5 6 7 8
因此很明显,事情错了,它是不理解,它应该只添加不重复的变量。
你的逻辑是有缺陷的。这就是为什么你得到意想不到的结局。请参阅您的代码如下修订:
for (i = 0; i < length_B; i++) {
int skip = 0;
for (j = 0; j < length_C; j++) {
if (array_B[i] == array_C[j]) {
skip=1;
break;
}
}
if(skip == 1) continue;
array_C[position++] = array_B[i];
}
问题是里面你内心的循环逻辑。根据问题的陈述,如果array_c的任何值与array_b你应该摆脱那种价值,否则添加到array_c值的任何值相匹配。所以你可以简单地尝试做以下。请确保你理解的代码。如果您有任何问题随时问。
for (i = 0; i < length_B; i++) {
bool isExistInArrayC = false;
for (j = 0; j < length_C; j++) {
if (array_B[i] == array_C[j]) {
isExistInArrayC = true;
break;
}
}
//this is the position tracker to add new value in array_C
if (isExistInArrayC == false) {
array_C[position] = array_B[i];
position++;
}
}
这些建议肯定会工作,但性能(尤其是大尺寸阵列)会非常差。我会保持一个有序数组“C”,做一个二进制搜索到它时,从阵列B加入整数你所需要的当然是列C双链表。