我试图逐个元素地比较2个数组,看看它们是否相同。我可以让它适用于除len = 0之外的所有情况。我似乎无法说两个数组a = {}和b = {}是相同的。
这是我到目前为止所拥有的
int identical( int a[], int b[], unsigned int len )
{
int same=0;
for( unsigned int i=0; i<len; i++ )
{
if(len==0)
{
same=1;
}
if (a[i]==b[i])
{
same=1;
}
else{
same=0;}
}
return same;
}
答案 0 :(得分:5)
这很简单
int identical(int *a, int *b, unsigned int len) {
for (unsigned int i = 0 ; i < len ; ++i) {
if (a[i] != b[i])
return 0;
}
return 1;
}
如您所见,您不需要遍历所有值,一旦您发现单个值不等于另一个数组中的对应值,您将立即返回0
,否则始终返回{{1包括何时1
,因为在这种情况下将有0次迭代,代码将直接跳转到len == 0
语句。
答案 1 :(得分:0)
下面是您编写的代码,让我们一步一步看看它有什么问题。举例len = 3
和int a[3] = {1,2,3}
int b[3] = {4,5,3}
,这些数组是否相同,没有它们不是。
了解您的代码无效的原因被认为是一种很好的做法,因此,让我们看看您的代码所说的内容。
您的代码
int identical( int a[], int b[], unsigned int len ){
int same=0; //same is Initialised to 0
for( unsigned int i=0; i<len; i++ ){
if(len==0){ //As len is not zero this condition is not true
same=1;
}
if (a[i]==b[i]){ //For i = 0 , a[0]!=b[0] same stays `0`
//Comes Another iteration a[1]!=b[1] same stays `0`
//Comes Last Iteration a[2]==b[2] if is executed same becomes 1
same=1;
}
else{
same=0;}
}
return same; //Function Returns 1
}
所以你的代码返回1
,在上面的例子中,你知道为什么它是正确的,不是没有,在你的代码中,它比较两个元素,如果它们是相同的,它会改变{{1所以它实际上告诉你的是,如果最后一个元素是否相同,因为循环执行,如果元素相等则在最后一个阶段,然后same = 1
如果不是那么它是same = 1
。
对于您的same = 0
条件,由于行len = 0
,for( unsigned int i=0; i<len; i++ )
,如果i = 0
然后循环开始,以及i<len
循环,则循环永远不会执行从不开始。
你应该做的是初始化变量len = 0
,如果元素不相等则将其更改为零并打破循环,因为一个不同的元素足以说明数组不相同,如果相同则是same = 1
,那么你就知道每个元素都是一样的。
以下是代码
更正后
1