计算两个数组C++中匹配元素的数量

Count the number of matching elements in two arrays C++

本文关键字:元素 C++ 数组 两个 计算      更新时间:2023-10-16

我正在为Comp Sci I做家庭作业,我已经尝试了在互联网和课本上能找到的一切,试图计算两个C++数组中匹配元素的数量。我根本找不到一种方法来计算两个大小相同(值相同,位置相同)的数组中匹配元素的数量。例如,如果array1具有5、4、3、2、1,并且array2具有1、2、3、4、5,则存在一个匹配元素,即3。如何让我的代码执行这个看似简单的任务?

在任何地方都找不到答案。我的课本只展示了如何在不计算匹配次数的情况下查看数组是否完全匹配,我还没有找到其他人对C++有这个确切的问题。

到目前为止,我的功能是:

int matchCounter(int lottery[5], int user[5], int matches, int SIZE)
{
int count = 0;
for (count < SIZE; count++;)
{
if (lottery[count] == user[count])
{
matches++;
}
}
return matches;
} // end matchCounter

顺便说一下,SIZE是一个等于5的常数。这似乎应该有效,但每次我运行程序时,它都会显示0个匹配项,即使有一些匹配项。如果有人能帮我,我将永远欠你的债。说真的,一定有一些非常简单的事情我没有看到。谢谢你提前提供的帮助。

您的for语句是乱码。试试这个:

int matchCounter(int lottery[5], int user[5], int matches, int SIZE)
{
for (int count = 0; count < SIZE; count++)
{
...

由于程序总是失败的原因:count++被放在for循环中条件的位置,所以每次执行for循环时,count都会被评估并被认为是条件,然后count会增加1。然而,每次count从0开始(如在int count = 0;中),所以for循环实际上从未被执行,并且matches保持为零。

编辑:

从你的源代码来看,你没有使用你的返回值,这也是@jimhark建议的。将函数签名更改为:

int matchCounter(int lottery[5], int user[5], int SIZE)

并呼叫:

matches = matchCounter(lottery, user, 5);

否则,函数matchCounter的返回值将被忽略,而int matches仅在函数中扮演局部变量的角色。

阅读以下关于matches不工作的原因:http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html(在类似设置中)

由于这是一项家庭作业,我将尝试在不给出解决方案的情况下指出错误。

for循环的形式是:

for (INIT; COND; STEP) {
BODY;
}

相当于:

INIT;
while (COND) {
BODY;
STEP;
}

按照你的方式,你的INIT是count < SIZE,它什么都不做。您的"COND"是count++,它在第一次迭代时返回0。正如您所知,在布尔值的上下文中,0是false。因此,您的for循环体根本没有被执行。

此外,不应将matches作为参数传递。它应该是用0初始化的局部变量。

您可能没有使用返回值。将sig更改为:

int matchCounter(int lottery[5], int user[5], int SIZE)
{
matches = 0;

并确保您的电话是:

matches = matchCounter(lottery, user, 5);

如果你需要一个连续的总和,请使用:

matches += matchCounter(lottery, user, 5);

在任何情况下,matchCounter都不在乎运行总数是多少,那么为什么要把它传进来呢?

此外,您可能需要先对列表进行排序。

也许这会有所帮助:

int matches=0;
for(int i=0;i<ARRAY.SIZE;i++) {
for(int j=0;j<ARRAY.SIZE;j++) {
if(arr1[i]==arr2[j]) {
matches++;
arr2[j]=NULL;
}
}
}