3

我正在为 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

4 回答 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 (在类似的设置中)

于 2012-11-21T00:34:54.587 回答
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 都不关心运行总数是多少,那么为什么要传递它呢?

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

于 2012-11-21T00:37:10.410 回答
1

由于这是一个家庭作业,我将尝试指出错误而不给出解决方案。

for循环的形式是:

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

这相当于:

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

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

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

于 2012-11-21T00:39:02.283 回答
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;
       }
   }
}
于 2013-11-26T21:41:10.687 回答