程序检查两个数组的相似元素

时间:2018-09-22 04:44:16

标签: c++

我正在编写一个程序来从2个数组中获取公共数......但是每当我运行此程序时..我就将第1个数组的第二个元素作为一个公共数...

#include <iostream>
using namespace std;

int numbChecker(int arr1[], int arr1Digit, int arr2[], int arr2Digit) {

    int arrDigit = arr1Digit*arr2Digit, arr1indx = 0, arr2indx = 0 , counter = 0;
    while(arrDigit != 0) {
        if (arr1[arr1indx] == arr2[arr2indx]) {
            cout << arr1[arr1indx] << endl;
        } else {
            cout << "no" << endl;
        }
        arrDigit--;
        counter++;
        arr2indx++;

        if (counter == (arr2Digit - 1)) {
            arr1indx++;
            arr2indx = 0;
        }
    }
}

int main() {

    int a[4] = {1,2,3,4};
    int b[5] = {5,6,7,8,9};
    numbChecker(a,4,b,5);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果要查找两个数组中都出现的数字,您要做的就是将第一个数组的每个值与第二个数组的每个值进行比较,这可以使用两个嵌套的for循环来完成:

#include <cstddef>
#include <iostream>

void numbChecker(int arr1[], std::size_t arr1Digit, int arr2[], std::size_t arr2Digit)
{
    for (std::size_t i{}; i < arr1Digit; ++i)
        for (std::size_t k{}; k < arr2Digit; ++k)
            if (arr1[i] == arr2[k])
                std::cout << arr1[i] << '\n';
}

但是,如果这些代码在数组之一中多次出现,则此代码将多次报告某些条目。

答案 1 :(得分:0)

我很惊讶您的程序没有在以下行中给出数组超出范围的异常:

if (counter == (arr2Digit - 1))

由于您一直在增加计数器变量,而不是在任何地方重置它,因此在arr1的第一次迭代后,即当arr1index = 1时,计数器将等于5,arr1index = 1和arr2index = 0。在arr2index进行4次迭代后,即当arr2index = 5时,程序将看到计数器= 9 arr2index = 5,因此,如果条件返回false,则在下一次迭代中,将以index = 5访问arr2,从而导致数组超出范围的异常