【问题标题】:Count the number of matching elements in two arrays C++计算两个数组C ++中匹配元素的数量
【发布时间】:2012-11-21 00:31:00
【问题描述】:

我正在为 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 个匹配项,即使有一些匹配项也是如此。如果有人可以帮助我,我将永远欠你的债。说真的,一定有一些我没有看到的非常简单的事情。提前感谢您的帮助。

【问题讨论】:

  • 另外,问题中的代码无法编译
  • 我很确定你没有尝试过“字面上的一切”。
  • 您应该从这个问题中删除“班级”和“家庭作业”标签。 “类”标签是指编程结构,而不是学校/大学的课程。 “作业”标签已过时,正在被删除,请参阅:stackoverflow.com/questions/tagged/homework 了解更多详情。

标签: c++ arrays function


【解决方案1】:

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

【讨论】:

  • 仍然不起作用,即使是您列出的格式。也许我的代码中的其他地方存在问题。这是我的源代码的链接:link
  • @user1840483 将第 50 行更改为 matches = matchCounter(lottery, user, matches, SIZE);
  • 成功了。非常感谢。
  • @user1840483 如果您认为这没问题,请单击左侧的复选标记接受它作为答案。谢谢。 :-)
【解决方案2】:

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

for循环的形式是:

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

相当于:

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

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

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

【讨论】:

    【解决方案3】:

    您可能没有使用您的返回值。将 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 并且没有显示该函数是如何调用的。这值得一试。
    • @XiaoJia,谢谢。我认为无论谁投反对票,他们可能已经编程太久了,他们不记得学习 C 是什么感觉。几乎每个人一开始都会犯这样的错误。祝你好运。
    【解决方案4】:

    也许这会有所帮助:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      相关资源
      最近更新 更多