我似乎无法弄清楚如何比较C ++中的两个数组,myArray1& myArray2,用myArray2中的元素替换myArray1中的零,而不复制任何数字。基本上,我想用1&替换两个零。 3 - 以任何顺序......
int myArray1[4] = [0,2,0,4]
int myArray2[4] = [1,2,3,4]
我希望输出为:
myArray1[4] = [1,2,3,4] -or- [3,2,1,4]
任何帮助都会很棒,如果这是一个重复的问题,那就很抱歉。
答案 0 :(得分:0)
天真的解决方案是循环myArray1
以找到零,当找到一个循环myArray2
时,找到myArray1
中不存在的第一个元素(这将是在另一个嵌套循环中完成。)
所以你将有三个循环,每个循环都嵌套在另一个循环中。
在伪代码中
for each value1 in myArray1:
if value1 = 0:
for each value2 in myArray2:
// Check that the value from myArray2 doesn't exist in myArray1
found = false
for each tempValue1 in myArray1:
if value2 = tempValue1:
found = true // Found a duplicate
break out of loop
if not found:
value1 = value2
break out of loop
答案 1 :(得分:0)
根据我的理解,这可能是解决方案:
int main(){
int myArray1[4] = {0,2,0,4};
int myArray2[4] = {1,2,3,4};
for (int i = 0; i < 4; i ++)
{
for (int j = i; j <4 ; j++) {
if (myArray1[i] == 0) {
myArray1[i] = myArray2[j];
}
}
}
for(int i = 0;i<4;++i){
cout<<myArray1[i]<<" ";
}
return 0;
}
答案 2 :(得分:0)
您的任务可以通过设置操作解决:
const size_t N = 4;
int a[N] = {0,2,0,4};
int b[N] = {1,2,3,4};
int r[N] = {};
{
std::sort(a, a+N);
std::sort(b, b+N);
// invariant: the a set must be in the b set
std::set_union(a, std::remove(a, a+N, 0), b, b+N, r);
}
for(size_t i = 0; i < N; ++i)
std::cout << i << ":" << r[i] << std::endl;