C ++检查重复数组并替换它们

时间:2016-11-06 01:55:10

标签: c++ arrays

我有一个充满值的数组,该数组不能包含任何重复值。对于任何重复值,将值加1。这是我到目前为止的代码,但我仍然得到重复。 (randArray是值所在的位置)。

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

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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;
            }
        }
    }

答案 2 :(得分: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
          }
      }
}

答案 3 :(得分:0)

#include <iostream>
#include <unistd.h>
#include <algorithm>

using namespace std;

int main()
{
    int arr[8]={0,1,1};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout<<n<<"\n";
  
    /*Here we take two parameters, the beginning of the
    array and the length n upto which we want the array to
    be sorted*/
    //sort(arr, arr + n);
    for (int i=0;i<=n;i++){
        cout<<arr[i]<<" ";

    }
    int result=0;
    do{
        for (int i=0;i<=n;i++){
            for (int j =0;j<i;j++){
                if(arr[j]==arr[i]){
                    srand(time(NULL)); // Seed the time
                    int finalNum = rand()%((10-1)+1); // Generate the number, assign to variable.
                    arr[i] = finalNum;
                    result = result + 1;
                    sleep(1);
                    i--;
                    
                }
            }
        }
    }
    while(result<=2);
    n = sizeof(arr) / sizeof(arr[0]);
  
    /*Here we take two parameters, the beginning of the
    array and the length n upto which we want the array to
    be sorted*/
    //sort(arr, arr + n);
    cout<<"\n";
    for (int i=0;i<=n;i++){
        cout<<arr[i]<<" ";

    }

    return 0;
}

答案 4 :(得分:-1)

(我假设Window是C风格的数组。) sizeof(randArray) 返回元素数量在数组中,它返回window.opener.location占用的字节数。

示例(on wandbox)

randArray

在现代C ++中使用数组的正确方法是使用std::arraystd::vector。它们都提供了一个randArray方法,用于返回集合中元素的数量。

由于以下原因,您的代码失败了:

  • int main() { int arr[] = {1, 2, 3, 4}; // Prints 16! (on my machine) std::cout << sizeof(arr) << "\n"; } 不会返回数组中元素的数量。

  • 将重复元素递增1并不能保证它是唯一的。