将两个数组复制到一个更大的数组中?

时间:2012-04-13 10:08:25

标签: c++

我有以下问题:

  

使用名为“merge”的函数编写一个程序,该函数将一个数组的数据整数复制到一个更大的数组中,然后将第二个数组的数据整数复制到第一个数组的内容之后的较大数组中/ p>

我的功能有问题

如果我输入数组1的{1,2}和数组2的{3,4}

然后输出为1 2 -57574 -658675
它应该是1 2 3 4

void merge (int a[], int n, int b[],int m) {

int c[100];
int x=n+m ; //size of merge aray c[] 

for(int i = 0; i < n; i++)
c[i]=a[i];

for(int j = n ; j < x ; j++)
c[j] = b[j];

cout<<endl<<endl;


for(int k = 0; k < x; k++)

cout<<c[k]<<" ";


}

9 个答案:

答案 0 :(得分:5)

问题:

  1. 您需要动态创建正确大小的数组 - 可能超过100个项目。
  2. 您需要从b[0]而不是b[n]开始复制。

答案 1 :(得分:2)

这是我的简单代码。修改它以达到合并功能目的。

int main() {
    int a[5];
    int b[5];
    int c[10];

    cout << "Enter elements for array a[5]:" << endl;
    int i = 0;
    do {
        cin >> a[i];
        i++;
    } while (i <= 4);

    cout << "Enter elements for array b[5]:" << endl;
    i = 0;
    do {
        cin >> b[i];
        i++;
    } while (i <= 4);

    for (register int x = 0; x <= 5; x++) {
        if (x == 5) {
            for (register int h = 0; h < 5; h++) {
                c[x] = b[h];
                x++;
            }
            break;
        }
        c[x] = a[x];
    }

    for (register int x = 0; x < 10; x++) {
        cout << c[x] << " ";
    }
    return (0);
}

答案 2 :(得分:1)

为什么不使用矢量?像这样:

std::vector<int> concat(const std::vector<int>& a, const std::vector<int>& b) {
    std::vector<int> c;
    c.reserve(a.size() + b.size());
    c.insert(c.end(), a.begin(), a.end());
    c.insert(c.end(), b.begin(), b.end());
    return c;
}

答案 3 :(得分:0)

c[j] = b[j];

是问题所在。第一个j是正确的,但第二个j应该是j - n

答案 4 :(得分:0)

在第二个循环中

for(int j = n ; j < x ; j++)
c[j] = b[j];    <---- b[j] not defined, you need to start from b[0]

试试这个:

for(int j = n ; j < x ; j++)
c[j] = b[j-n];

答案 5 :(得分:0)

void merge (int a[], int n, int b[],int m) 
{
  int* c = new int[n+m];

  for(int i = 0; i < n; i++)
    c[i]=a[i];

  for(int j = 0 ; j < m ; j++)
    c[n+j] = b[j]; // <-- there was your fault

  cout<<endl<<endl;
  for(int k = 0; k < n+m; k++)
    cout<<c[k]<<" ";

  delete [] c;
}

答案 6 :(得分:0)

内部循环可以重写为:

for(int j=0;k=n;j<m,k<x;j++,k++)

{

     c[k]=b[j];

}

我希望你明白了......

答案 7 :(得分:0)

void merge (int a[], int n, int b[],int m) 
{

    int c = new int[n + m];
    std::copy(a, a + n, c);
    std::copy(b, b + m, c + n);

    cout<<endl<<endl;
    for(int k = 0; k < n+m; k++)
        cout<<c[k]<<" ";    

    delete[] c;
}

答案 8 :(得分:-1)

#include<iostream>
#include<assert.h>


void merge(int first[], int nLenFirst, int second[], int nLenSecond, int merged[]) 
{
    int nTotal = nLenFirst + nLenSecond;

    for(int i= 0; i < nLenFirst; ++i)
        merged[i] = first[i];

    for(int i= nLenFirst, j = 0; i < nTotal; ++i,++j)
        merged[i] = second[j];

}

void main()
{
    int a[] = {2, 4, 5, 7};
    int b[] = {3, 7, 11, 19, 25};

    int nLenA = sizeof(a)/sizeof(int);
    int nLenB = sizeof(b)/sizeof(int);

    int c[100] = {0};

    int nTotal = nLenA + nLenB;
    assert(sizeof(c)/sizeof(int) >= nTotal);

    merge(a, nLenA, b, nLenB, c);

    for(int i = 0; i < nTotal; ++i)
    {
        std::cout << c[i] << std::endl;
    }
}

专注于断言!