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