如何查找数组中是否有任何重复的元素? C ++

时间:2018-12-03 13:28:02

标签: c++ arrays

我正尝试阅读我拥有的50.000个单词的单词列表,并整理出所有带有重复字母的单词。 我已经设法选择一个随机单词,将其转换为数组中的chars,但是如何在该数组中搜索重复项?

4 个答案:

答案 0 :(得分:3)

std::adjacent_find是你的朋友:

template< class ForwardIt >
ForwardIt adjacent_find( ForwardIt first, ForwardIt last );
     

搜索两个连续相同的范围[first,last)   元素。

     

返回值

     

第一个相同元素对中第一个的迭代器[...]   如果找不到此类元素,则返回last

首先对数组进行排序,然后对其进行adjacent_find并检查其是否返回最后一个。

答案 1 :(得分:0)

您还可以使用哈希查找重复的单词。

  • 1。首先创建哈希表。

  • 2。一对一地遍历单词。

  • 3。对于每个单词,检查单词是否已经存在。.如果已经存在,则打印单词,否则将其插入哈希。

您可以使用unordered_set<string> s进行哈希处理。

void printDup(vector<string> words) 
{ 
    unordered_set<string> s; 
    bool f = false; 
    for(int i = 1; i<words.size(); i++) 
    { 
        if (s.find(words[i]) != s.end()) 
        { 
            cout << words[i] << endl; 
            f = true; 
        } 
        else
            s.insert(words[i]); 
    } 
    if(f == false) 
        cout << "No Duplicate words" << endl; 
}

答案 2 :(得分:0)

我猜您有一个char指针数组,因为说了“将其转换为数组中的chars”,因此代码如下:

#include <iostream>

typedef const char* str;
str array [] = {"Hello", "how", "are", "you"};

bool isDuplicated (str word, str* array, int dimension);

int main() {

    int length = sizeof(array) / sizeof (char);
    str word = "Hello";
    std::cout << "The word " << word << " is duplicated: " << isDuplicated (word, array, length) << std::endl;
    std::cin.get();
}

bool isDuplicated(str word, str* array, int dimension) {
    bool duplicated = false;
    for(int i = 0; i < dimension; i ++) {
        if(array[i] == word) {
            duplicated = true;
            break;
        }
    }
    return duplicated;
}

答案 3 :(得分:0)

您问:选择一个随机词,将其转换为数组中的chars,但是如何在该数组中搜索重复项?

使用增强,可以归结为:

const bool hasDuplicates = boost::size(letters) != boost::size(boost::unique(letters));