簡體   English   中英

比較兩個數組並使用公共元素創建第三個數組

[英]Comparing two arrays and creating third array with common elements

我需要比較兩個數組並輸出另一個顯示常見元素的數組。 我期待的代碼輸出是: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();
    }

您正在打印陣列的地址
打印數組的元素

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

PS:考慮首先對數組進行排序,如果iArr1[i] > iArr2[j]那么你就不需要掃描eavh pass上的所有元素了

C ++在標准庫中有一個set_intersection 算法

#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()需要對輸入進行排序。

好的,我希望這不是功課。 你擁有它的方式,輸出將是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] << " ";

在對數組進行排序時,請使用std::set_intersection 否則你只需要先std::sort它們進行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,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM