如何比较两个数组,看看它们是否相同?

时间:2017-02-05 01:59:46

标签: c arrays compare

我试图逐个元素地比较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;
}

2 个答案:

答案 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 = 3int 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 = 0for( unsigned int i=0; i<len; i++ ),如果i = 0然后循环开始,以及i<len循环,则循环永远不会执行从不开始。

你应该做的是初始化变量len = 0,如果元素不相等则将其更改为零并打破循环,因为一个不同的元素足以说明数组不相同,如果相同则是same = 1,那么你就知道每个元素都是一样的。

以下是代码

更正后

1