C++布尔问题(两个数组之间的比较)
我有一个问题要做。我已经做了一些部分,但是我卡住了,不知道下一步该做什么。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;
}
这看起来像功课,所以我不打算喂你答案。但我会指出一些基本问题。
首先,你可以尝试定义返回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
。
这实际上是一个样本考试问题,我试图按照我的做法来做。 – Martin 2010-05-10 19:52:01
您应该遍历2个数组,而不是1个数组进行比较。否则你将与9,4比2与12等
这里是一些指向了正确的方向:
for(i=0;i<BMAX;i++)
{
for (j=0;j<AMAX;j++)
{
if (B[i]==A[j])
{
}
else
{
}
}
}
你应该把它包在一个函数作为你的问题的状态。
首先你必须写一个函数。然后学习功能,因为它看起来像目前你不知道什么功能。
这是暗示,你的循环做错了什么?
for(i=0;i<BMAX;i++)
if (B[i]==A[i]) //A[BMAX - 1]???
不需要讽刺(我没有你) – 2010-05-10 21:45:12
@Romain Hippeau ???????? – doc 2010-05-11 08:56:32
我刚刚看到“你没有线索”这个短语,有点讽刺。 – 2010-05-11 14:24:43
我的回答再次...夫妇的这个工作小时后:) 感谢您的帮助!
包括
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;
}
嗯未定义行为。 – kennytm 2010-05-10 19:42:37
如果存在'i'使得'A [i] == B [i]'或者存在'i,j'使得'A [i] == B [j],您是否需要返回true ]'? – 2010-05-10 19:43:52
这里更严重的问题是,你要超过数组A的范围! BMAX高于AMAX,你的循环将最终检查数组A后面的内存,它甚至不会被分配给它! – LukeN 2010-05-10 19:46:26