2015-01-16 34 views
0

讓我們假設用戶將數字10,11,22,33,44,55,66,77,88,& 99輸入到數組中。然後程序必須將50以下和50以上的數字分隔成兩個不同的數組,即array2和array3。但是當我運行我的程序時,它會在array2和array3中顯示一些垃圾內存。將數組的某些元素轉移/分離到其他數組

我的程序將與顯示器上運行:

號在陣列1

10, 11, 22, 33, 44, 55, 66, 77, 88, 99 

號在數組2

1972394090, 22, 33, 44, 0, 4202032, 2686624, 2686680, 2686924, 10, 11 

號在ARRAY3

2686700, 4202032, 0, 2686604, 55, 66, 77, 88, 99, 1972394134, 1972394090 

,這是我的功能代碼(N定義爲10)

void segArr(int array[N], int array2[N], int array3[N]) 
{ 

    int i; 


    for(i=1; i<N; i++) 
    { 
     if(array[i]<50) 
      array2[i]=array[i]; 
     if(array[i]>50) 
      array3[i]=array[i]; 
    } 

    return; 
} 
+0

你期望元素,例如'array2 [1]'包含什麼?你沒有分配任何東西,所以它會包含隨機位。**我在提問前推薦學習C++ ** – Walter

回答

0

一開始,數組的下標從0開始,而不是1。其次,你確實複製感興趣的數組元素,但無論array2array3中的舊數組內容是不是首先被清除,顯然也沒有在調用代碼中設置:這就是爲什麼當您打印出數組元素時,會看到類似1972394090的「垃圾」值,儘管在技術上它是未定義的行爲甚至嘗試打印未初始化的值,並且您可能會同樣讓程序中止或發生故障。

你可能想要做這樣的事情,而不是:

void segArr(int array[N], int array2[N], int array3[N]) 
{ 
    size_t i2 = 0, i3 = 0; 
    for (size_t i = 0; i < N; ++i) 
    { 
     if (array[i] < 50) 
      array2[i2++] = array[i]; 
     else if (array[i] > 50) 
      array3[i3++] = array[i]; 
    } 
    if (i2 < N) array2[i2] = 50; 
    if (i3 < N) array3[i3] = 50; 
} 

這樣,你可以通過N-1打印出array2array3元素0,如果你看到一個50值停止早。 (我用50作爲結束結果定點價值,因爲它是唯一的整數值,你不可能在array2也不array3

+0

你的'array2 []'和'array3 []'仍然包含垃圾... – Walter

+0

@Walter:是的,很刻意......只有每個開始時的元素直到標記值50或元素「[N-1]」(如果不存在50)不會是垃圾。當標識清楚地表明有意義的數據停止在哪裏時,我沒有看到浪費時間/代碼的要點將這些元素設置爲除垃圾以外的任何內容。當你循環打印出來的時候,當你看到50時停止,並且所有先前打印的值不應該是垃圾。 –

+0

哎呀,對不起,我顯然沒有完全閱讀你的答案(但只有代碼) – Walter

1

也許你想要做這樣的事情:

const int split=50; 
int n2=0, n3=0; 
for(int i1=0; i1!=n1; ++i1) 
    if(array1[i1] < split) 
    array2[n2++] = array1[i1]; 
    else 
    array3[n3++] = array1[i1]; 
// n2,n3 now hold the filled sizes of array2 and array3 

當然,使用std容器可以更好地完成所有這些......特別是,您可能對std::partitionstd::stable_partition感興趣,它們重新排列數組/容器中的順序或元素。

0

這是因爲你可能宣佈載體是這樣的:

std::vector<int> array2(10); 

,並顯示該矢量的每一個元素。如果某個元素爲空,則顯示隨機數據。

你應該只是iniciaze向量,並使用push_back() f.e.

if(array[i]>50) 
array2.push_back(array[i]); 
相關問題