题目描述
运用c++实现两个集合的运算,集合的元素采用大写字母A~Z的形式。要求实现以下功能:
(1)集合的输入:自动去掉重复和非法的字符;
(2)集合的显示:输出集合的全部元素;
(3)输出一个给定集合的补集;
(4)输出两个给定集合的交集和并集。
案例代码
下面是一个用 C++ 实现的简单案例,实现了描述的功能:
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
// 函数声明
set<char> inputSet();
void displaySet(const set<char>& s);
set<char> complement(const set<char>& s);
set<char> intersection(const set<char>& s1, const set<char>& s2);
set<char> unionSet(const set<char>& s1, const set<char>& s2);
int main() {
// 输入集合
cout << "Enter set A:\n";
set<char> setA = inputSet();
cout << "Enter set B:\n";
set<char> setB = inputSet();
// 显示集合
cout << "Set A: ";
displaySet(setA);
cout << "Set B: ";
displaySet(setB);
// 输出补集
cout << "Complement of set A: ";
displaySet(complement(setA));
cout << "Complement of set B: ";
displaySet(complement(setB));
// 输出交集和并集
cout << "Intersection of set A and set B: ";
displaySet(intersection(setA, setB));
cout << "Union of set A and set B: ";
displaySet(unionSet(setA, setB));
return 0;
}
// 输入集合
set<char> inputSet() {
set<char> s;
string input;
cout << "Enter elements (A-Z, separated by spaces): ";
getline(cin, input);
// 去掉重复和非法字符
for (char c : input) {
if (isalpha(c) && isupper(c)) {
s.insert(c);
}
}
return s;
}
// 显示集合
void displaySet(const set<char>& s) {
cout << "{ ";
for (char c : s) {
cout << c << " ";
}
cout << "}\n";
}
// 补集
set<char> complement(const set<char>& s) {
set<char> compSet;
for (char c = 'A'; c <= 'Z'; ++c) {
if (s.find(c) == s.end()) {
compSet.insert(c);
}
}
return compSet;
}
// 交集
set<char> intersection(const set<char>& s1, const set<char>& s2) {
set<char> interSet;
for (char c : s1) {
if (s2.find(c) != s2.end()) {
interSet.insert(c);
}
}
return interSet;
}
// 并集
set<char> unionSet(const set<char>& s1, const set<char>& s2) {
set<char> uniSet = s1;
uniSet.insert(s2.begin(), s2.end());
return uniSet;
}
这个程序首先让用户输入两个集合,然后分别实现了输入集合、显示集合、补集、交集和并集等功能。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END