qq_39677327 2022-06-27 16:12 采纳率: 94.9%
浏览 161
已结题

设计一个类,利用运算符重载,进行集合的并集、差集运算

设计一个类,利用运算符重载,进行集合的并集、差集运算,例如输入整数集合s1{9 5 2}和s2{7 5},计算它们的并运算s1+s2,s1-s2,并能显示输出。示例数据显示运行结果如下:

img

img

类设计提示如下:

class set{
public:
    set(){len=0;}//构造函数
    void input(int d);//向集合添加元素
    int length(){return len;}//返回集合中元素个数
    int getd(int i);//返回集合中位置i的元素
    void disp();//显示集合元素
    set operator+(set s1);//重载+,实现集合的并集运算
set operator-(set s1);//重载-,实现集合的差集运算
protected:
    int len;//集合中元素个数
int s[MAX];};//集合中元素

  • 写回答

2条回答 默认 最新

  • 关注

    把求差集和并集的逻辑再+和-函数中实现就可以了。
    集合中的数据由键盘输入,运行结果如下:

    img

    代码:

    #include<iostream>
    #include<string>
    using namespace std;
    #define MAX 10
    
    class set 
    {
    public:
        set() { len = 0; }//构造函数
        void input(int d);//向集合添加元素
        int length() { return len; }//返回集合中元素个数
        int getd(int i);//返回集合中位置i的元素
        void disp();//显示集合元素
        set operator+(set s1);//重载+,实现集合的并集运算
        set operator-(set s1);//重载-,实现集合的差集运算
    protected:
        int len;//集合中元素个数
        int s[MAX];
    };//集合中元素
    
    
    void set::input(int d)
    {
        s[len++] = d;
    }
    
    int set::getd(int i) { return s[i]; }
    
    void set::disp()
    {
        for (int i = 0; i < len; i++)
        {
            if (i < len - 1)
                cout << s[i] << " ";
            else
                cout << s[i] << endl;
        }
    }
    
    set set::operator+(set s1)
    {
        set sout;
        int i = 0, j = 0;
        int lens1 = s1.length();
        //先把this的数据添加到sout中
        for (i = 0; i < len; i++)
        {
            sout.input(s[i]);
        }
        //再把s1中的数据添加到sout中
        for (i = 0; i < lens1; i++)
        {
            for (j = 0; j < len; j++)
            {
                if (this->getd(j) == s1.getd(i))
                    break;
            }
            if (j == len)
                sout.input(s1.getd(i));
        }
        return sout;
    }
    //重载-,实现集合的差集运算
    set set::operator-(set s1)
    {
        set sout;
        int i, j;
        int lens1 = s1.length();
        for (i = 0; i < len; i++)
        {
            for (j = 0; j < lens1; j++)
            {
                if (s1.getd(j) == this->getd(i))
                    break;
            }
            if (j == lens1)
                sout.input(this->getd(i));
        }
        return sout;
    }
    
    
    int main()
    {
        set s1, s2;
        int len1, len2, t;
        cout << "请输入集合1的数据个数:";
        cin >> len1;
        cout << "请输入集合1的数据:";
        for (int i = 0; i < len1; i++)
        {
            cin >> t;
            s1.input(t);
        }
        cout << "请输入集合2的数据个数:";
        cin >> len2;
        cout << "请输入集合2的数据:";
        for (int i = 0; i < len2; i++)
        {
            cin >> t;
            s2.input(t);
        }
        //输出
    
        cout << "集合s1中的元素个数是:" << s1.length() << "其中含有的元素是";
        s1.disp();
        cout << "集合s2中的元素个数是:" << s2.length() << "其中含有的元素是";
        s2.disp();
    
        set sout1 = s1 + s2;
        cout << "集合s1和集合s2的并集为s1+s2,元素个数是" << sout1.length() << "其中含有的元素是";
        sout1.disp();
    
    
        set sout2 = s1 - s2;
        cout << "集合s1和集合s2的差集为s1-s2,元素个数是" << sout2.length() << "其中含有的元素是";
        sout2.disp();
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 修改了问题 6月27日
  • 创建了问题 6月27日

悬赏问题

  • ¥15 用ucinet怎么计算子群体个数和核心边缘结构拟合度
  • ¥15 nrf52810-c三个a 程序
  • ¥15 lego-loam跑出来的roll误差很大
  • ¥50 求一个半透明没有锯齿的圆角窗体的实现例子
  • ¥15 STM32cubeMX里的FreeRTOS无法释放内存
  • ¥15 CATIA有些零件打开直接单机确定终止
  • ¥15 请问有会的吗,用MATLAB做
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度