数组搜索和唯一值添加

时间:2017-06-17 22:50:38

标签: c++ arrays

(对不起,如果格式非常糟糕。我以前从未发布过。)

我已经上课了几个小时的课程,我无法弄清楚我需要做什么才能让它做我想做的事情。最终结果应该是addUnique会将唯一的输入添加到它自己的列表中。

#include <iostream>
using namespace std;

void addUnique(int a[], int u[], int count, int &uCount);
void printInitial(int a[], int count);
void printUnique(int u[], int uCount);

int main() {
    //initial input
    int a[25];
    //unique input
    int u[25];
    //initial count
    int count = 0;
    //unique count
    int uCount = 0;
    //user input
    int input;

    cout << "Number Reader" << endl;
    cout << "Reads back the numbers you enter and tells you the unique entries" << endl;
    cout << "Enter 25 positive numbers. Enter '-1' to stop." << endl;
    cout << "-------------" << endl;
    do {
        cout << "Please enter a positive number: ";
        cin >> input;
        if (input != -1) {
            a[count++] = input;
            addUnique(a, u, count, uCount);
        }
    } while (input != -1 && count < 25);

    printInitial(a, count);
    printUnique(u, uCount);

    cout << "You entered " << count << " numbers, " << uCount << " unique." << endl;
    cout << "Have a nice day!" << endl;

}

void addUnique(int a[], int u[], int count, int &uCount) {
    int index = 0;
    for (int i = 0; i < count; i++) {
        while (index < count) {
            if (u[uCount] != a[i]) {
                u[uCount++] = a[i];
            }
            index++;
        }
    }
}

void printInitial(int a[], int count) {
    int lastNumber = a[count - 1];
    cout << "The numbers you entered are: ";
    for (int i = 0; i < count - 1; i++) {
        cout << a[i] << ", ";
    }
    cout << lastNumber << "." << endl;
}

void printUnique(int u[], int uCount) {
    int lastNumber = u[uCount - 1];
    cout << "The unique numbers are: ";
    for (int i = 0; i < uCount - 1; i++) {
        cout << u[i] << ", ";
    }
    cout << lastNumber << "." << endl;
}

问题是我的addUnique函数。我之前把它写成了一个看起来像这样的for循环:

for (int i = 0; i < count; i++){
    if (u[i] != a[i]{
        u[i] = a[i]
        uCount++;
    }
}

我明白为什么这不起作用:你是一个空数组,所以比较a和u在同一个地方总是会导致i的值加到你身上。我需要的是,这个函数在决定是否是应该添加到u的唯一值之前扫描所有a。

如果有人能指出我正确的方向,那将非常感激。

1 个答案:

答案 0 :(得分:2)

您对唯一性的检查是错误的...这是您对addUnique的定义。

void addUnique(int value, int u[], int &uCount)
{
  for (int i = 0; i < uCount; i++){
    if (u[i] == value)
      return;   // already there, nothing to do.
  }
  u[uCount++] = value;
}