比较两个数组并使用公共元素创建第三个数组

时间:2013-12-07 21:34:38

标签: c++

我需要比较两个数组并输出另一个显示公共元素的数组。 我期待的代码输出是:0000056789。 将不胜感激。

    #include <iostream>
    using namespace std;

    const int CE = 10;
    const int TOP = CE-1;


    int iArr1[CE]={0,1,2,3,4,5,6,7,8,9};
    int iArr2[CE]={5,6,7,8,9,10,11,12,13,14};
    int iArr3[CE]={0,0,0,0,0,0,0,0,0,0};



    void main()
    {

        int i;
        int j;
        int iCarr3 = 0;

        for(i=0; i<=TOP; i++)
        {
            for (j=0; j<=TOP; j++)
            {
                if (iArr1[i]==iArr2[j])
                {
                    iCarr3++;
                    iArr3[iCarr3]=iArr2[j];
                }
            }
        }

        cout << iCarr3 << endl;
        cout << iArr3;
        getchar();
    }

4 个答案:

答案 0 :(得分:1)

您正在打印阵列的地址
打印数组元素

for (int i = 0; i < size; i++) // keep track of the size some how
   cout<<iArr3[i]<<" ";

P.S:考虑先对数组进行排序,然后以iArr1[i] > iArr2[j]方式进行排序,这样就不需要扫描eavh传递中的所有元素

答案 1 :(得分:1)

C ++在set_intersection中有algorithm Standard Library

#include <iostream>
#include <algorithm>

int main()
{
    const int CE = 10;
    int iArr1[CE] = {0,1,2,3,4,5,6,7,8,9};
    int iArr2[CE] = {5,6,7,8,9,10,11,12,13,14};
    int iArr3[CE] = {0,0,0,0,0,0,0,0,0,0};
    std::set_intersection(std::begin(iArr1), std::end(iArr1),
        std::begin(iArr2), std::end(iArr2),
        std::begin(iArr3));
    std::copy(std::begin(iArr3), std::end(iArr3), std::ostream_iterator<int>(std::cout, " "));
}

输出

5 6 7 8 9 0 0 0 0 0 

注意

如果您的数组尚未排序,您可以先将数据放入std::set,因为std::set_intersection()需要对输入进行排序。

答案 2 :(得分:0)

好的,我希望这不是功课。你拥有它的方式,输出将是5678900000.输出可以根据需要更改你的代码:

    for(i=0; i<=TOP; i++)
    {
        for (j=0; j<=TOP; j++)
        {
            if (iArr1[i]==iArr2[j])
            {
                iArr3[iCarr3]=iArr2[j];
            }
        }
        iCarr3++;
    }

然后输出执行此操作:

   for(int k = 0; k <= iCarr3; k++)
       std::cout << iArr3[iCarr3] << " ";

答案 3 :(得分:0)

在对数组进行排序时,请使用std::set_intersection。否则你以前只需要std::sort

但是永远不要忘记使用STD库,代码更紧凑,更易读......而且大多数情况下,你会带来更多的错误和更快的速度。

http://ideone.com/c3xE3m

#include <algorithm>
#include <iostream>
#include <iterator>

const size_t CE = 10;
int iArr1[CE]={0,1,2,3,4,5,6,7,8,9};
int iArr2[CE]={5,6,7,8,9,10,11,12,13,14};
int iArr3[CE]={0,0,0,0,0,0,0,0,0,0};

int main(int argc, char const *argv[])
{
    auto end_elemnt = 
        std::set_intersection(iArr1, iArr1 + CE,
                              iArr2, iArr2 + CE,
                              iArr3);

    std::copy(iArr3, end_elemnt, std::ostream_iterator<int>(std::cout, ", "));
    return 0;
}

这是输出:

 $ ./a.exe
 5, 6, 7, 8, 9,