1

我知道这可能看起来像一个硬件问题,并作为我的客人来对待它,因为这是一个自学练习。

测试多个数组中是否存在某些值的最简单方法是什么?

例如:

伪代码

if array a contains a value of 4 and
   array b contains a value of 2 and
   array c contains a value of 6 
then procede to procedure x

到目前为止我在实施中所做的

#include<stdio.h>

void x(void){/* do stuff */}

int main()
{
    char fndA = 0;
    char fndB = 0;
    char fndC = 0;

    int a[5] = {1,2,3,5,6};    
    int b[5] = {1,2,2,3,4};
    int c[5] = {1,3,4,5,6};

    for(int i=0;i<5;i++)
    {
        if(a[i]==4){fndA=1;}
    }

    //repeat for-loop for b/fndb and c/fndC

    if (fndA && fndB && fndC) {x();}

    return 0;
}

在这个例子中,x()永远不会被调用,因为数组中不存在 4 a。但是我最终是否必须for为要测试的每个数组构建一个循环?谢谢

4

3 回答 3

5

是的。但是您显然可以创建一个执行循环的函数。您需要将数组、它的大小和您要查找的元素传递给该函数。

int array_contains_int(int *arr, size_t size, int value) {
    int i;
    for(i = 0; i < size; i++)
        if(arr[i] == value)
            return 1;
    return 0;
}
于 2012-05-21T20:04:09.353 回答
2

是的。你写的代码基本上就是你会做的。通常,您似乎将数组视为集合,在这种情况下,您可以将其视为具有集合签名的抽象数据类型。相反,如果您以其他方式实现这些数组,则可以抽象该member()函数以具有较低的运行时间,通常为 O(log(n))(对于基于树的实现)。但是,是的,无论你做什么,你都会想要对你的member()函数做一个 AND 。

于 2012-05-21T20:05:23.637 回答
0

我会创建一个函数,它接受一个 int 和一个数组并返回 true 或 false。然后和其中三个一起。

如果第一个循环中的一个在条件中返回 false,这具有额外的好处,即不调用以后的循环。

于 2012-05-21T20:05:08.643 回答