2012-04-13 16 views
0

I、次の質問があります。2つのアレイを1つの大きなアレイにコピーしますか?

は「マージ」という名前の関数を使用してプログラムを書くことをコピーデータより大きなサイズの配列に1列の整数、とにコピー二番目の配列のデータの整数をIは、アレイ2

の配列1及び{3,4}の{1,2}を入力した場合、私の関数

に問題があるだけで最初の配列

の内容の後に大きなアレイ

その後、出力が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]<<" "; 


} 
+1

「b [j]」とは何ですか? 'j'は大きな数字です。 2回目のコピーパスのインデックスを変更する必要があります。 – Vlad

+1

じゃあ、なぜこれらの質問は即刻の答えを得るのですか?私は私のタイプを入力する時間があります。 : – ApprenticeHacker

+2

このコードは、C++に似ています。標準コンテナについては、 –

答えて

5

問題でなければなりません:あなたは動的に正しいサイズの配列を作成する必要が

  1. - もっとあるかもしれませんその100項目。
  2. ではなく、b[0]からコピーを開始する必要があります。
+0

thanxすべて,,,最後に解決しました –

+0

[void merge(int a [、int n、int b []、int m){ int c [100]; int x = n + m; // int i = 0; i

+0

@hussain:受け入れるものとして最も好きな答えを記入するのを忘れないでください。 – Vlad

0
c[j] = b[j]; 

です。最初のjは正しいですが、2番目のjは実際にはj - nです。第二ループ内

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]; 
+4

準備が整った宿題に関するコードを提供しないほうが良いです。 – Vlad

+0

@Vlad大丈夫、次回はそのことを覚えておいてください。 – Pheonix

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; 
} 
+2

(1) 'delete []'(2)そしてOPはready解決策から何を学びますか?いくつかのヒントを与える方が良い。 – Vlad

+0

正しいインデックスを見つける/使用することに関連する唯一の問題だから、完全な解決策を与えるのは大丈夫だと思う。 – TheVoidSeeker

+0

OPは割り当てフォームにコードを貼り付けて忘れてしまうので、その任務を全面的に敗北させる。 (IMHO) – Vlad

0

インナーループとして書き直すことができる:

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

{

​​

}

私はyouuがアサート上の点...

-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; 
    } 
} 

フォーカスを得た願っています!

+0

と 'nLenA + nLenB> 100'の場合はどうなりますか?それは_impossible_配列をマージするのですか? – Vlad

+0

アサート(0)が呼び出されます。それは不可能ではありませんが、それは疑問ではありませんか? 私の解決策の焦点はそのシナリオを強調することだと思います。それが、マージされた配列のサイズが入力配列のサイズよりも大きいことを保証する呼び出し関数を示した理由です。メモリの割り当てを行うと、問題の焦点はループのための2からメモリ管理に移ります。 – Ram

+0

@Vlad:あなたの解決策は何ですか?もちろん、ソリューション内の動的割り当て。 – Ram

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; 
} 
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; 
} 
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); 
} 
関連する問題