C中两个数组的交集函数

时间:2013-02-20 02:14:02

标签: c

我正在学习在我的操作系统类中使用C,这是我到目前为止我的函数找到两个数组的交集。

一个交集基本上就是当你拿两套时,你只得到两组中的元素。

因此,例如,如果集合A包含= {1,2,3}并且集合B包含= {2,3,4},那么A和B的交集是{2,3}。我正在尝试在C中创建一个获取两个数组的函数,并返回一个包含两个传递数组的整数的数组。

我想我差不多有解决方案了,但我收到的错误是: “标识符'计数'未定义”

    int intersection(int array1[4], int array2[4])
    {       
        int arrayReturn[sizeof(array1) + sizeof(array2)]
        int count = 0;

        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                if(array1[i]==array2[j])
                {
                    count = count + 1;
                    arrayReturn[count] = array1[i];
                }
            }
        }

    }

我非常习惯Java,我觉得Java和C几乎完全相同。我无法在这里找到错误,因为count在if语句的范围内。我没有看到计数是如何定义的。

计数有什么问题,如何修复此交叉函数?

4 个答案:

答案 0 :(得分:3)

您在count声明之前的行中缺少分号。

  int arrayReturn[sizeof(array1) + sizeof(array2)]; //Semicolon Here
  int count = 0;

我是如何看到错误的? 错误消息是identifier 'count' is undefined所以我检查的第一件事就是编译器告诉我的原因。然而,这不是问题,因为声明存在,并且在正确的范围内。所以,现在该怎么办?我应该在变量初始化之前和使用之前的行查看该行。这是您肯定会发现错误的地方。

简而言之,当编译器消息似乎没有帮助时,请不要停止。环顾四周。


另外,正如GRAYgoose124指出的那样,你应该在函数体的末尾有一个return语句,因为你的函数应该返回一个整数。

答案 1 :(得分:1)

在这一行上缺少一个半冒号:

int arrayReturn[sizeof(array1) + sizeof(array2)]; //semicolon was missing

答案 2 :(得分:0)

AshRj指出,你错过了一个分号。

提示:clang编译器非常适合提供诊断输出。如果您尝试使用它编译代码,则会得到以下输出:

source.c:3:57: error: expected ';' at end of declaration
        int arrayReturn[sizeof(array1) + sizeof(array2)]
                                                        ^
                                                        ;

即使您没有正常使用clang编译项目,也可以尝试编译片段以帮助您找出问题所在。就像你can see here一样,这就是我对你的代码片段所做的。 (请注意警告。)

答案 3 :(得分:0)

void readArr(int  arr1[],int n1, int arr2[],int n2,int arr3[]){
int n=0;
int j=0;
for(j=0;j<n1;j++){
    for(int k=0; k<n2;k++){
        if(arr1[j]==arr2[k]){
            int element = arr1[j];
            int k=checkArrayContains(arr3,n,element);
            if(k==1){
                printf("%d\n",arr1[j] );
                arr3[n]=arr1[j];

                n++;

            }

        }

    }
}

displayArray(arr3,n);}

我认为这种实现更为清晰。