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

时间:2012-11-21 00:31:00

标签: c++ arrays function

我正在为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个匹配项,即使有一些匹配项也是如此。如果有人能帮助我,我会永远欠你的债。说真的,我必须要看到一些非常简单的东西。谢谢你提前帮忙。

4 个答案:

答案 0 :(得分:3)

您的for声明是乱码。试试这个:

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

为什么你的程序总是失败的原因:count++被置于for循环中的条件位置,所以每次执行for循环时,{{1} }被评估并被认为是条件,然后count递增1.但是,每次count从0开始(如count),所以{{1}实际上永远不会执行循环,int count = 0;保持为零。

修改

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

for

并致电:

matches

否则,忽略函数int matchCounter(int lottery[5], int user[5], int SIZE) 的返回值,而matches = matchCounter(lottery, user, 5); 仅在函数中扮演局部变量的角色。

了解matchCounter无效的原因:http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html(在类似设置中)

答案 1 :(得分: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都不关心运行总计是什么,为什么要将其传入?

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

答案 2 :(得分:1)

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

for循环的形式是:

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

相当于:

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

你做的方式,你的INIT是count < SIZE,它没有做任何事情。您的“COND”是count++,在第一次迭代时返回0。您可能知道,在布尔值的上下文中,0为假。因此,你的for循环体根本没有被执行。

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

答案 3 :(得分: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;
       }
   }
}