0
int a[10];
int b[10];
memcmp(a, b, sizeof(int) * 10);

memcmp()只告诉我们哪个内存块更大/更小,因为它只返回-1,0,+1。有没有办法知道发生不匹配的匹配元素的数量a[]b[]之后的数量。

Ex: a = {1, 2, 3, 4, 5, 6}
    b = {1, 2, 4}

这里memcmp(a, b, sizeof(int)* 3)将返回-1。我想得到 2 作为答案 有没有一种方法可以借助memcmp或一些类似的内置函数来获得匹配元素的数量

4

3 回答 3

2

我假设您想要一个低级别的答案,因为您必须已经拒绝了使用循环的简单方法。

您可以用 b[0] 到 b[9] 对内存块 a[0] 到 a[9] 进行异或。当且仅当原始数组相等时,结果内存将是一个零块。要获得匹配元素的数量,请计算所有位为零的 int 块的数量。

您可以在汇编程序中快速完成此操作,因为操作非常简单。

于 2013-05-23T11:24:09.740 回答
0

两个数组上的for循环就足够了:

int a[10];
int b[10];
int aLen = sizeof(a)/sizeof(int); /* we can do this since arrays are declared on the stack */
int bLen = sizeof(b)/sizeof(int);
int currentContig = 0;
int maxContig = 0;

for (int aIdx = 0, int bIdx = 0; (aIdx < aLen) && (bIdx < bLen); ) {
    if (a[aIdx] == b[bIdx]) {
        currentContig++;
        aIdx++;
        bIdx++;
    }
    else if (a[aIdx] > b[bIdx]) {
        currentContig = 0;
        aIdx++;
    }
    else {
        currentContig = 0;
        bIdx++;
    }
    if (currentContig > maxContig) {
        maxContig = currentContig;
    }
}

fprintf(stdout, "longest contiguous match: %d\n", maxContig);
于 2013-05-23T11:30:22.657 回答
0

请尝试如下

int matched_num=0;
while(a[matched_num]==b[matched_num])
matched_num++;
printf("%d",matched_num);

最终打印的值将是两个数组中匹配元素的总数。

于 2013-05-23T13:12:03.070 回答