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

时间:2012-05-21 20:01:33

标签: c arrays

我知道这可能看起来像是一个问题,并且应该像我的客人那样对待它,因为这是一次自学练习。

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

例如:

伪代码

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()永远不会被调用,因为数组a中的4不存在。但是我最终还是要为每个要测试的数组构建一个for循环吗?感谢

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我会创建一个带有int和数组的函数,并返回true或false。然后和其中三个在一起。

如果第一个中的一个在条件中返回false,则还有一个额外的好处就是不调用后面的循环。