3

私は Comp Sci I の宿題に取り組んでおり、2 つの C++ 配列で一致する要素の数を数えようとして、インターネットや教科書で見つけられるものすべてを文字通り試しました。コードで、同じサイズ (同じ値、同じ位置) の 2 つの配列内の一致する要素の数をカウントする方法が見つかりません。たとえば、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たびに評価され、条件と見なされ、1 ずつインクリメントされます。 0 (のように) であるため、ループは実際には実行されず、ゼロのままです。forcountcountcountint count = 0;formatches

編集:

ソースコードから、戻り値を使用していません。これは、@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であり、何もしません。あなたの「条件」はcount++、最初の反復で 0 を返します。ご存じのとおり、ブール値のコンテキストでは 0 は false です。したがって、 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 に答える