如何最好地将整型数组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相同的数组。我已经搜索了一段时间,但没有找到一个令人满意的答案。
我知道这是初学者问题,感谢您的耐心。
使用标准的<string.h>
库中的memcmp
函数。
memcmp(a, b, sizeof(a)) == 0
每当a
和b
相等时。
int a[] = {0,1,0,0,1};
int b[] = {0,1,0,0,1};
int c[] = {1,1,0,0,1};
那么
memcmp(a, b, sizeof(a)); /* returns zero for a match */
memcmp(a, c, sizeof(a)); /* returns nonzero for no match */
需要更多关于这个问题的信息。 我可以将您的问题分为以下两种方式:
问题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***
第二题的解决方案: 可以使用memcmp来解决这个问题,以下是最佳解决方案
在这里,我回答了上述问题 https://dev59.com/zmAf5IYBdhLWcg3w52Ll#36130812
出于性能原因,memcmp()将逐字节比较,而int数组则以4字节块为单位。如果数组很大或者你需要比较许多数组,这很可能会非常慢。
最简单的方法是运行一个for循环,一旦找到差异就退出。
bool is_array_equal(const int * a, const int * b, length){
for (int i = 0; i < length; ++i){
if(a[i] != b[i]){ return false; }
}
return true;
}
int
类型中存在填充位,memcmp()
可能会产生错误的负面结果。幸运的是,提问者不太可能遇到这样的实现。 - J. C. Salomonint
内部存在秘密未初始化的位吗?也许你可以给出一个实际的例子来说明你的意思 - 实际上,最好是提出一个问题(如果你愿意,还可以回答)而不是在评论中继续讨论。 - Useless