您能帮我删除数组c ++挑战中的重复值吗?

时间:2018-10-24 19:52:40

标签: c++ arrays

挑战在于编写一个程序,该程序删除数组的重复值。

#include <iostream>
using namespace std;

void func(int arrayA[], int n, int arrayB[]) {
    int h = 0;
    int count = 0;
    arrayB[0] = arrayA[0];
    for (int i = 1; i < n; i++) {
        count = 0;
        for (int j = 0; j < n; j++) {
            if (arrayB[i] == arrayA[j]) {
                count++;
            }
        }
        if (count == 0) {
            h++;
            arrayB[h] = arrayA[i];
        }
    }
}
int main() {
    int n;
    cin >> n;
    int arrayA[n];
    int arrayB[n];
    for (int i = 0; i < n; i++) {
        cin >> arrayA[i];
    }
    func(arrayA, n, arrayB);
    for (int i = 0; i < n; i++) {
        cout << arrayB[i] << endl;
    }
}

我的逻辑是创建一个新数组,并用非重复值填充它,为此,我创建了一个循环,当找到重复值时该循环将1加到计数器上,如果计数器等于0,则添加该值。然后计数器重新启动。

谢谢您对新程序员的帮助,我真的尝试自己解决它。

1 个答案:

答案 0 :(得分:1)

使用std::vector

如果您想偷懒,请尝试签出此example。您可以执行以下操作(未测试):

std::vector<int> func(int a[], int size_a){
    std::vector<int> vec_a(a, a + size_a); 
    std::sort(vec_a.begin(), vec_a.end()); 
    std::vector<int> ordered_vec_a = std::unique(vec_a.begin(), vec_a.end()); 
    vec_a.erase(ordered_vec_a, vec_a.end()); 
    return ordered_vec_a;
}

“ Hardcore” C ++

如果您想解决问题并继续使用“原始”方法继续解决问题,则需要确保返回的数组完全个唯一数组a中的元素。

因此,首先,获取a的唯一元素的数量,看看此answer。之后,您可以创建输出数组b

int b = new int[size_calc_from_post]
//do stuff here.
delete[] b; // make sure to delete! 
b = NULL;