2016-11-06 49 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

相关问题