0

我有以下问题:

编写一个带有名为“merge”的函数的程序,它将一个数组的数据整数复制到一个更大的数组中,然后将第二个数组的数据整数复制到第一个数组内容之后的更大的数组中

我的功能有问题

如果我为数组 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]<<" ";


}
4

9 回答 9

5

问题:

  1. 您需要动态创建正确大小的数组 - 可能超过 100 个项目。
  2. 您需要从b[0]not开始复制b[n]
于 2012-04-13T10:11:25.217 回答
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);
}
于 2012-09-07T22:36:56.883 回答
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;
}
于 2012-04-13T10:52:18.550 回答
0
c[j] = b[j];

是这里的问题。第一个j是正确的,但第二个j应该是真的j - n

于 2012-04-13T10:11:35.680 回答
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];
于 2012-04-13T10:11:51.643 回答
0

内部循环可以重写为:

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

{

     c[k]=b[j];

}

我希望你明白这一点...

于 2012-04-13T10:24:53.333 回答
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;
}
于 2012-04-13T10:13:03.733 回答
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;
}
于 2012-04-13T10:54:18.203 回答
-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;
    }
}

专注于断言!

于 2012-04-13T10:26:33.333 回答