Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 比较两个相同长度的int数组的最佳方法?_C_Arrays_Compare_Int_C99 - Fatal编程技术网

C 比较两个相同长度的int数组的最佳方法?

C 比较两个相同长度的int数组的最佳方法?,c,arrays,compare,int,c99,C,Arrays,Compare,Int,C99,比较int数组b和c与a的最佳方法是什么: int a[] = {0,1,0,0,1}; int b[] = {0,1,0,0,1}; int c[] = {1,1,0,0,1}; b和c只是示例,假设它们可以是0和1的任意组合 我正在尝试检测与a相同的数组。我在谷歌上搜索了一段时间,没有找到满意的答案 我意识到这是一个初学者问题,感谢您的耐心。使用中的标准memcmp功能 每当a和b相等时。使用循环并逐个比较各个元素。如果您的意思是 int a[] = {0,1,0,0,1}; int b[

比较int数组b和c与a的最佳方法是什么:

int a[] = {0,1,0,0,1};
int b[] = {0,1,0,0,1};
int c[] = {1,1,0,0,1};
b和c只是示例,假设它们可以是0和1的任意组合

我正在尝试检测与a相同的数组。我在谷歌上搜索了一段时间,没有找到满意的答案


我意识到这是一个初学者问题,感谢您的耐心。

使用
中的标准
memcmp
功能


每当
a
b
相等时。

使用循环并逐个比较各个元素。

如果您的意思是

int a[] = {0,1,0,0,1};
int b[] = {0,1,0,0,1};
int c[] = {1,1,0,0,1};
然后


关于这个问题需要更多的信息。 我可以把你的问题分为以下两种方式

  • 考虑顺序比较数组内容?? Ex:chara[]={a,b,c},b[]={a,c,b}这里由于您考虑了顺序,所以内容不一样=b

  • 是否不考虑顺序比较数组内容? Ex:chara[]={a,b,c},b[]={a,c,b} 如果您不考虑订单,则此处的内容相同,因此a==b

  • 问题1的解决方案: 可以使用memcmp解决此问题。因为memcmp将比较字典,并返回0或1或-1,如下所示

     #include<stdio.h>
        #include<string.h>
        int main()
        {
    
            char a[]={'a','b','c'};
            char b[]={'a','b','c'};
            int x=memcmp(a,b,sizeof(a));
            printf("%d\n",x);
    
        return 0;
        }
    ***output:0***
    
        #include<stdio.h>
        #include<string.h>
        int main()
        {
    
            char a[]={'a','c','b'};
            char b[]={'a','b','c'};
            int x=memcmp(a,b,sizeof(a));
            printf("%d\n",x);
    
        return 0;
        }
    ***output:1***
    
        #include<stdio.h>
        #include<string.h>
        int main()
        {
    
            char a[]={'a','b','c'};
            char b[]={'b','a','c'};
            int x=memcmp(a,b,sizeof(a));
            printf("%d\n",x);
    
        return 0;
        }
    ***output:-1***
    
    #包括
    #包括
    int main()
    {
    字符a[]={'a','b','c'};
    字符b[]={'a','b','c'};
    int x=memcmp(a,b,sizeof(a));
    printf(“%d\n”,x);
    返回0;
    }
    ***输出:0***
    #包括
    #包括
    int main()
    {
    字符a[]={'a','c','b'};
    字符b[]={'a','b','c'};
    int x=memcmp(a,b,sizeof(a));
    printf(“%d\n”,x);
    返回0;
    }
    ***产出:1***
    #包括
    #包括
    int main()
    {
    字符a[]={'a','b','c'};
    字符b[]={'b','a','c'};
    int x=memcmp(a,b,sizeof(a));
    printf(“%d\n”,x);
    返回0;
    }
    ***输出:-1***
    
    问题2的解决方案: 可以使用memcmp解决此问题,解决此问题的最佳方案如下所示

    在这里,我回答了上面的问题

    次要注意:如果
    int
    类型中有填充位,
    memcmp()
    可能会产生假阴性。幸运的是,OP不太可能在这样的实现中运行。@J.C.Salomon:What's padding bits in
    int
    type”?在这种情况下,在C中使用memcmp是不可靠的,因为可能存在padding bits。当然,除了@无用这是真的,但这也是一种误导。我说的是整数本身的填充位。在这种情况下,在C中使用memcmp是不可靠的,因为可能存在填充位。当到达其中一个数组的末尾时,不要忘记退出循环,以防大小不同
    memcmp(a, b, sizeof(a)); /* returns zero for a match */
    memcmp(a, c, sizeof(a)); /* returns nonzero for no match */
    
     #include<stdio.h>
        #include<string.h>
        int main()
        {
    
            char a[]={'a','b','c'};
            char b[]={'a','b','c'};
            int x=memcmp(a,b,sizeof(a));
            printf("%d\n",x);
    
        return 0;
        }
    ***output:0***
    
        #include<stdio.h>
        #include<string.h>
        int main()
        {
    
            char a[]={'a','c','b'};
            char b[]={'a','b','c'};
            int x=memcmp(a,b,sizeof(a));
            printf("%d\n",x);
    
        return 0;
        }
    ***output:1***
    
        #include<stdio.h>
        #include<string.h>
        int main()
        {
    
            char a[]={'a','b','c'};
            char b[]={'b','a','c'};
            int x=memcmp(a,b,sizeof(a));
            printf("%d\n",x);
    
        return 0;
        }
    ***output:-1***