gpt4 book ai didi

c++ - 如何求两个以上数组的交集?

转载 作者:行者123 更新时间:2023-12-02 01:45:27 25 4
gpt4 key购买 nike

我想对两个以上的数组进行相交。这是我的编码的不完整版本:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
int n;

cin >> n;
cout << "\n";

string rock[n];

for(int i=0;i<n;i++)
{
cin >> rock[i];
cout << "\n";
}

for(int i=0;i<n;i++)
sort(rock[i].begin(), rock[i].end());

}

例如,如果我输入

3
asasadfg
aassdw
dasaasf

我希望输出是这样的

ads

超过 2 个数组之间不存在重复和相交。最好的方法是什么?谢谢

最佳答案

注意:可变长度数组在 C++ 中不是标准的,充其量只是编译器特定的功能。在这种情况下,因为编译时不知道长度,所以最好使用 std::vector

现在,我们只需要知道如何找到两个字符串的交集,并在整个 vector 中执行此操作。我确信有一种更优雅的方式,但希望您可以追踪下面发生的事情。

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

int main() {
int n;

std::cin >> n;
std::cout << "\n";

std::vector<std::string> rocks;

for (int i = 0; i < n; ++i) {
std::string temp;
std::cin >> temp;
rocks.push_back(temp);
std::cout << "\n";
}

for (auto &s : rocks) {
std::sort(s.begin(), s.end());
}

std::string diff = rocks[0];

for (int i = 1; i < n; ++i) {
std::string temp_diff;

std::set_intersection(
diff.begin(), diff.end(),
rocks[i].begin(), rocks[i].end(),
std::back_inserter(temp_diff));

diff = temp_diff;
}

auto last = std::unique(diff.begin(), diff.end());
diff.erase(last, diff.end());

std::cout << diff << std::endl;

return 0;
}

关于c++ - 如何求两个以上数组的交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70980598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com