2010-05-10 78 views
1

我有一個問題要做。我已經做了一些部分,但是我卡住了,不知道下一步該做什麼。C++布爾問題(兩個數組之間的比較)

問題:「給出兩個整數數組,名爲A和B.一個包含AMAXELEMENTS,另一個包含BMAXELEMENTS。編寫一個布爾值函數,返回true,如果A中至少有一個點同在B中的點,而假的,如果有兩個陣列之間不匹配。「

兩個數組都是由我做出了決定,我想如果我知道如何比較兩個數組我會沒事的,我將能夠完成我的問題。

這是我迄今爲止(我改變AMAXELEMENTS到AMAX,並BMAXELEMENTS到BMAX):

#include <iostream> 
using namespace std; 

int main() 
{ 
    const int AMAX = 5, BMAX = 6; 
    int i; 
    bool c1 = true, c2 = false; 
    int A[AMAX] = { 2, 4, 1, 5, 9 }; 
    int B[BMAX] = { 9, 12, 32, 43, 23, 11 }; 

    for (i = 0; i < BMAX; i++) 
     if (B[i] == A[i])  // <---- I think this part has to look 
           //  different, but I can't figure it out. 
      cout << c1 << endl; 
     else 
      cout << c2 << endl; 
    return 0; 
} 
+0

嗯未定義行爲。 – kennytm 2010-05-10 19:42:37

+2

如果存在'i'使得'A [i] == B [i]'或者存在'i,j'使得'A [i] == B [j],您是否需要返回true ]'? – 2010-05-10 19:43:52

+2

這裏更嚴重的問題是,你要超過數組A的範圍! BMAX高於AMAX,你的循環將最終檢查數組A後面的內存,它甚至不會被分配給它! – LukeN 2010-05-10 19:46:26

回答

4

這看起來像功課,所以我不打算餵你答案。但我會指出一些基本問題。

首先,你可以嘗試定義返回true的功能/假:

bool has_identical_value(int A[], size_t A_MAX, int B[], size_t B_MAX) 
{ 
    bool answer = false; 

    ... your homework goes here ... 

    return answer; 
} 

二是要確保你永遠不會引用A[i]其中i >= A_MAX,你永遠不引用B[j]其中j >= B_MAX

+0

這實際上是一個樣本考試問題,我試圖按照我的做法來做。 – Martin 2010-05-10 19:52:01

2

您應該遍歷2個數組,而不是1個數組進行比較。否則你將與9,4比2與12等

這裏是一些指向了正確的方向:

for(i=0;i<BMAX;i++) 
{ 
    for (j=0;j<AMAX;j++) 
    { 
     if (B[i]==A[j]) 
     { 
     } 
     else 
     { 
     } 
    } 
} 

你應該把它包在一個函數作爲你的問題的狀態。

0

首先你必須寫一個函數。然後學習功能,因爲它看起來像目前你不知道什麼功能。

這是暗示,你的循環做錯了什麼?

for(i=0;i<BMAX;i++) 
    if (B[i]==A[i]) //A[BMAX - 1]??? 
+0

不需要諷刺(我沒有你) – 2010-05-10 21:45:12

+0

@Romain Hippeau ???????? – doc 2010-05-11 08:56:32

+0

我剛剛看到「你沒有線索」這個短語,有點諷刺。 – 2010-05-11 14:24:43

0

我的回答再次...夫婦的這個工作小時後:) 感謝您的幫助!

包括

using namespace std; bool myBool(int,int,int [],int []);};}}

int main(){ 

    const int SIZEA=5; 
    const int SIZEB=4; 
int A[]={54,65,76,67,4}; 
    int B[]={23,435,67,5}; 

    if (myBool(SIZEA, SIZEB,A,B)) 
    cout<<"TRUE"<<endl; 

    else 
    cout<<"FALSE"<<endl; 
    return 0; 

}

bool myBool(int AMAXELEMENTS, int BMAXELEMENTS, int A[], int B[]){ 
    int i,j; 

    for(i=0;i<AMAXELEMENTS;i++){ 
    for(j=0;j<BMAXELEMENTS;j++){ 
     if(A[i]==B[j]) 
      return true;  
    } 
    } 
    return false; 

}