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

3
我正在为计算机科学I的作业做翻译,我尝试了互联网和教材中能够找到的所有方法来计算两个C++数组中匹配元素的数量,但我无法找到一种方法使我的代码可以计算两个相同大小(相同值,相同位置)的数组中匹配元素的数量。例如,如果数组1包含5、4、3、2、1,而数组2包含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个匹配项,即使存在一些匹配项。如果有人能帮助我解决问题,我将永远感激你。说真的,肯定有一些非常简单的事情我没有想到。提前感谢您的帮助。


std::set_intersection - Mooing Duck
此外,问题中的代码无法编译。 - Mooing Duck
我非常确定你还没有尝试“真正的一切”。 - bames53
您应该从此问题中删除“class”和“homework”标签。“class”标签是指编程结构,而不是学校/大学的班级。“homework”标签已过时,并正在被删除,请参见:http://stackoverflow.com/questions/tagged/homework 了解更多详情。 - Logan Besecker
4个回答

3
您的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(在类似的环境下)。

即使按照您列出的格式,仍然无法正常工作。也许我的代码中还有其他问题。这是我的源代码链接:链接 - user1840483
@user1840483 将第50行修改为 matches = matchCounter(lottery, user, matches, SIZE); - Xiao Jia
@user1840483 如果您认为这个答案可以,请点击左侧的勾号接受它作为答案。谢谢。 :-) - Xiao Jia

1

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

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

请确保您使用以下方式进行通话:

matches = matchCounter(lottery, user, 5);

如果您需要一个运行总和,请使用:
matches += matchCounter(lottery, user, 5);

无论如何,matchCounter并不关心运行总数是多少,所以为什么要传递它呢?

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


踩票有点过了。他说他总是打印0,但没有展示函数如何被调用。这值得检查。 - jimhark
@XiaoJia,谢谢你。我认为那些给我点踩的人可能已经编程很久了,他们不记得学习C语言是什么感觉了。几乎每个人在开始学习时都会犯这样的错误。祝你好运。 - jimhark

1

由于这是一份作业,我会尝试指出错误而不提供解决方案。

for循环的形式为:

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

这相当于:

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

你的INIT是count < SIZE,这样做没有任何作用。你的“COND”是count++,在第一次迭代中返回0。正如你所知道的,在布尔上下文中,0表示false。因此,你的for循环体根本没有被执行。
另外,你不应该将matches作为参数传递。它应该是一个初始化为0的局部变量。

0

或许这可以帮助:

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;
       }
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接