2016-11-06 79 views
-1

我有一個數組完整的值,數組不能包含任何重複的值。爲任何重複的值添加一個值。這裏是我到目前爲止的代碼,但我仍然得到重複。 (randArray是值的位置)。C++檢查數組的重複項並替換它們

for (int i = 0; i < sizeof(randArray) - 1; i++) { 
    for (int j = sizeof(randArray); j == 0; j--) { 
     if (randArray[i] == randArray[j]) { 
      randArray[i] == randArray[i] + 1; 
     } 
    } 
} 

回答

-1

(我假設randArray是C風格的陣列。)sizeof(randArray)返回在數組中元素的數目,它返回randArray佔用的字節數。

(on wandbox)

int main() 
{ 
    int arr[] = {1, 2, 3, 4}; 

    // Prints 16! (on my machine) 
    std::cout << sizeof(arr) << "\n"; 
} 

在現代C++陣列工作的正確的方法是使用兩種或std::arraystd::vector。它們都提供了一個返回集合中元素數量的.size()方法。

您的代碼失敗原因如下:

  • sizeof不返回數組中元素的個數。

  • 遞增一個重複的元素不能保證它是唯一的。

+1

所有偉大的建議,但沒有解決的核心問題。 –

2

你必須增加重複時,一個錯字:

 randArray[i] = randArray[i] + 1; // not == 

而且,增量可能會創建另一個重複。如果以後出現的物品沒有問題。但由於數組未被排序,您可能無法捕獲已經傳遞的值的新副本。

因此您可能需要幾個通行證:

bool wasaninc; 
do { 
     wasaninc=false; 
     for ... 
      for ... 
       ... // if there is an increment, set wasaninc to true 
    } while (wasaninc); 
+0

感謝沒有實現 – noam

0
Change randArray[i] == randArray[i] + 1; to randArray[i] = randArray[i] + 1; 

    for (int i = 0; i < sizeof(randArray) - 1; i++) { 
     for (int j = sizeof(randArray); j == 0; j--) { 
      if (randArray[i] == randArray[j]) { 
       randArray[i] = randArray[i] + 1; 
      } 
     } 
    } 
0

你的問題是由於sizeof(randArray)。此方法不返回數組中元素的數量。

例如:

int array[5] = { 1, 2, 3, 4, 5}; 
sizeof(array); // -> returns 20, because of 5 * 4 bytes (integer = 4 bytes) 

使用這種方法你實際上應該使用數組中元素的數目代替。你在開始時已經聲明瞭數組的大小。所以很清楚該陣列中有多少個元素可以存在。

正確示例:

int array[100] = {...}; 
for (int i = 0; i < 99; i++) { 
    for (int j = 0; j < 99; j++) { 
      if (array[i] == array[j]) { 
       // code for duplicates 
      } 
     } 
} 
+0

這不解決問題! – noam

相關問題