识别数组中的重复元素?

时间:2018-10-04 21:54:00

标签: c++

该程序应该让用户输入5个名称并输出任何重复的名称。如何使我的程序为数组中的值输出“重复名称”?我似乎无法理解如何编写它,因此当用户输入名称时它将检查重复的元素。谢谢。

#include <iostream>

using namespace std;

int main() {

    string names[5];        //array with 5 names
    string input;

   for (string input : names){
        cout << "Please enter a name: ";   
        cin >> input;
    }

    for (int check = 1; check-1; check++){

        if (input == names[check]){
            cout << input << " is a duplicate name!" << endl;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

一些要纠正的问题包括:

  • for (string input : names)创建一个临时变量,但无法修改原始数组;使用for (string &input : names)创建对循环块中每个数组元素的引用。
  • 您的for循环没有嵌套,因此没有理由将数组的某个元素(或input字符串)与其他元素进行比较。您可以将第二个循环嵌套在input循环中以在添加名称时执行检查,也可以将检查分成单独的块。请注意,有更有效的方法来解决此问题,例如保留unordered_set所见名称。嵌套循环的时间复杂度呈指数增长。
  • 您第二个for循环的终止条件并没有测试任何有用的条件(它评估为0的{​​{1}},立即终止循环)。迭代直到计数器达到或超过数组false的长度才更合适。
5

输出:

#include <iostream>

int main() {
    std::string names[5];

    for (std::string &input : names) {
        std::cout << "Please enter a name: ";   
        std::cin >> input;
    }

    for (int i = 0; i < 5; i++) {
        for (int j = i + 1; j < 5; j++) {
            if (names[i] == names[j]){
                std::cout << names[i] << " is a duplicate name!" << std::endl;
            }
        }
    }
}

Try it