比较两个数组并替换元素而不重复--c ++

时间:2015-10-16 12:04:54

标签: c++ arrays compare

我似乎无法弄清楚如何比较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]

任何帮助都会很棒,如果这是一个重复的问题,那就很抱歉。

3 个答案:

答案 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;