如何用C++编写一个程序,该程序能接收用户的输入,包含两个集合,然后分别计算并显示这两个集合的差集、对称差以及笛卡尔积?
时间: 2024-12-28 08:34:25 浏览: 10
在C++中,你可以使用标准模板库(STL)中的`set`容器和算法来实现这个功能。这里是一个简单的示例,假设用户输入的是两个字符串集合:
```cpp
#include <iostream>
#include <set>
#include <algorithm>
// 函数原型声明
std::set<std::string> diff(const std::set<std::string>& setA, const std::set<std::string>& setB);
std::set<std::string> symmetric_diff(const std::set<std::string>& setA, const std::set<std::string>& setB);
std::set<std::pair<std::string, std::string>> cartesian_product(const std::set<std::string>& setA, const std::set<std::string>& setB);
int main() {
std::set<std::string> setA, setB;
std::cout << "请输入集合A的元素,以空格分隔:" << std::endl;
std::string inputA;
getline(std::cin, inputA);
std::istringstream issA(inputA);
std::copy(issA.begin(), issA.end(), std::inserter(setA, setA.begin()));
std::cout << "请输入集合B的元素,以空格分隔:" << std::endl;
std::getline(std::cin, inputB);
std::istringstream issB(inputB);
std::copy(issB.begin(), issB.end(), std::inserter(setB, setB.begin()));
std::set<std::string> difference = diff(setA, setB);
std::cout << "差集: " << std::endl;
for (const auto& element : difference)
std::cout << element << " ";
std::set<std::string> symmetric_difference = symmetric_diff(setA, setB);
std::cout << "\n对称差: " << std::endl;
for (const auto& element : symmetric_difference)
std::cout << element << " ";
std::set<std::pair<std::string, std::string>> product = cartesian_product(setA, setB);
std::cout << "\n笛卡尔积: " << std::endl;
for (const auto& pair : product)
std::cout << "(" << pair.first << ", " << pair.second << ") ";
return 0;
}
// 辅助函数实现
std::set<std::string> diff(const std::set<std::string>& setA, const std::set<std::string>& setB) {
setB.erase(setA.begin(), setA.end());
return setB;
}
std::set<std::string> symmetric_diff(const std::set<std::string>& setA, const std::set<std::string>& setB) {
std::set<std::string> temp = setA;
temp.insert(setB.begin(), setB.end());
temp.erase(setA.begin(), setA.end());
temp.erase(setB.begin(), setB.end());
return temp;
}
std::set<std::pair<std::string, std::string>> cartesian_product(const std::set<std::string>& setA, const std::set<std::string>& setB) {
std::set<std::pair<std::string, std::string>> product;
for (const auto& a : setA) {
for (const auto& b : setB) {
product.insert({a, b});
}
}
return product;
}
```
阅读全文