【问题标题】:How to check if all the elements from array1 are in array2?如何检查array1中的所有元素是否都在array2中?
【发布时间】:2015-01-19 20:48:24
【问题描述】:

我需要编写一个程序来检查两个数组是否相等,这意味着来自array1 的元素都在array2 中。元素可能位于不同的行和列中,但第一个数组中的所有元素都需要在第二个数组中。我写了下面的代码:

 #include <stdio.h>

int fun(int m, int tab1[][m], int tab2[][m], int n)
{
    int i, j, k, p, itis = 0;

    if(itis == 0)
    {
        for(i=0; i<n; i++)
        {
            for(j=0; j<m; j++)
            {
                int elem = tab2[i][j];

                for(k=0; k<n; k++)
                {
                    for(p=0; p<m; p++)
                    {
                        if(tab1[k][m] == elem)
                        {
                            itis = 1;
                        }
                    }
                }

            }
        }
    }

    return itis;
}

int main()
{

    int tab1[][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    int tab2[][3] = {{7,8,9}, {1,2,3}, {4,5,6}};
    int tab3[][3] = {{0,0,0}, {0,0,0}, {0,0,1}};

    int tab4[][3] = {{7,8,9}, {1,2,3}, {4,5,0}};

    printf("%d\n", fun(3, tab1, tab4, 3));

    return 0;
}

如果第一个数组中的所有元素都存在于第二个数组中,我的函数应该返回 1(可能以不同的顺序 - 行/列)。但是对于tab1tab4,我得到的是1,而不是0。 (tab1 中有 6 个,但 tab4 中没有 6 个)。有什么想法吗?

【问题讨论】:

  • 不应该是 if(tab1[k][p] == elem) ... 吗?但是,当前代码仅检查单个匹配项。您可以为找到的每个匹配项增加一个计数,然后检查计数是否 == m*n。
  • 您的代码没有定义tab4,但您的问题提到了它。
  • 一般:展平、排序、比较。

标签: c arrays


【解决方案1】:
int fun(int m, int tab1[][m], int tab2[][m], int n){
    int *element1 = &tab1[0][0];//top element
    int *endp1    = element1 + n*m;//end element
    int *element2 = &tab2[0][0];
    int *endp2    = element2 + n*m;
    int itis = 0, *p;

    for(;element1 != endp1; ++element1){
        itis = 0;
        for(p = element2; p != endp2; ++p){
            if(*p == *element1){
                itis = 1;//found!
                break;
            }
        }
        if(itis==0)//not found
            return itis;//0
    }
    return itis;//1: all exist
}

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2019-12-22
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多