我需要比较两个数组并输出另一个显示公共元素的数组。 我期待的代码输出是: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();
}
答案 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库,代码更紧凑,更易读......而且大多数情况下,你会带来更多的错误和更快的速度。
#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,