C++实现集合运算

实现集合的交、并、差运算

//老师问为啥那么少的人提前交,我做完了但是好多地方没有中文提示,就是纯代码,我就准备先不交再完善下
#include<iostream>
#include<stdlib.h> //想用动态内存,但我发现直接定义足够大的静态数组比较简单,懒得写动态了
#include<stdio.h>
using namespace std;
//给集合赋值
void function_1(int A[100],int B[100],int &m,int &n){
    //system("cls");   //之前写的清屏函数,就图个画面干净,想模仿一下手机APP的感觉
    cout<<"***********************"<<endl;
    cout<<"*     1-输入集合A;    *"<<endl;
    cout<<"*     2-输入集合B;    *"<<endl;
    cout<<"*     3-返回;         *"<<endl;
    cout<<"***********************"<<endl;
    int t;
    while (t!=3){
        cout<<endl;
        cout<<"您已进入项目1!"<<endl;
        cout<<"请输入一个数字对项目1进行相应操作:";
        cin>>t;
        switch (t){
            case 1:{
                cout<<"请键入您想输入的数字个数:";
                cin>>m;
                for(int i=0;i<m;i++){
                    cout<<"第 "<<i+1<<" 个元素:";   //如果有重复数字出现,方便知道哪一个重复了
                    cin>>A[i];
                    if(i>=1){
                        for(int q=0;q<i;q++){  //遍历数组,查找是否有相同元素
                            if(A[i]==A[q]){
                                cout<<"您输入的第"<<i+1<<"个元素与之前有重复,请重新输入。"<<endl;
                                i--;
                                m=m--;     //因为重新进行循环,i的值没有保留,所以我们要减短长度,即补全集合,而不是再写一个新集合
                                break;
                            }
                        }
                    }
                }
                break;
            }
            case 2:{
                cout<<"请键入您想输入的数字个数:";
                cin>>n;
                for(int i=0;i<n;i++){
                    cout<<"第 "<<i+1<<" 个元素:";
                    cin>>B[i];
                    if(i>=1){
                        for(int q=0;q<i;q++){
                            if(B[i]==B[q]){
                                cout<<"您输入的第"<<i+1<<"个元素与之前有重复,请重新输入。"<<endl;
                                i--;
                                n=n--;
                                break;
                            }
                        }
                    }
                }
                break;
            }
        }
    }
    cout<<"您已完成数组赋值!"<<endl;
}
//求集合A交B
void function_2(int A[100],int B[100],int m,int n){
    cout<<"交集为:";
    for(int i=0;i<m;i++){
        for(int e=0;e<n;e++){
            if(A[i]==B[e]){
                cout<<A[i]<<" ";
            }
        }
    }
    cout<<endl;
}
//求集合A并B
void function_3(int A[100],int B[100],int m,int n){
   	cout<<"A并B为:";
	for(int k=0;k<m;k++) cout<<A[k]<<" ";
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(B[i]==A[j]) break;
			if(j==m-1) {cout<<B[i]<<" "; }   //若遍历到最后一位还没跳出循环,就代表与之前的元素都不重复
		}
	}
    cout<<endl;
}
//求集合A减B
void function_4(int A[100],int B[100],int m,int n){
    cout<<"A减B为";
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(A[i]==B[j]){break;}
            if(j==n-1){cout<<A[i]<<" ";}
        }
    }
    cout<<endl;
}
int main(){
    cout<<"**************************"<<endl;
    cout<<"*     1-输入集合A和B;    *"<<endl;
    cout<<"*     2-求集合A交B;      *"<<endl;
    cout<<"*     3-求集合A并B;      *"<<endl;
    cout<<"*     4-求集合A减B;      *"<<endl;
    cout<<"*   退出,输入一个负数   *"<<endl;
    cout<<"**************************"<<endl;
    int t;
    int A[100],B[100];
    int m,n;
    while (t>0){
        cout<<endl;
        cout<<"请输入一个数字对集合运算小程序进行相应操作:";
        cin>>t;
        switch (t){
            case 1:function_1(A,B,m,n);break;
            case 2:function_2(A,B,m,n);break;
            case 3:function_3(A,B,m,n);break;
            case 4:function_4(A,B,m,n);break;
        }
        //system("cls");
        //每一次执行指令都输出一遍用户定义的集合,方便查看结果
        if(m,n!=0){
            cout<<"您定义的集合A={";
            for(int i=0;i<m;i++){
            cout<<A[i];
            }
            cout<<"};"<<endl;
            cout<<"您定义的集合B={";
            for(int i=0;i<n;i++){
            cout<<B[i];
            }
            cout<<"}。"<<endl;
        }else{
            cout<<"您集合定义有问题,请退出程序重新执行。"<<endl;
        }
        cout<<endl;
    }
    cout<<endl;
    cout<<"*您已成功退出集合运算小程序*"<<endl;
    cout<<endl;
}

代码中我用的静态数组,你们可以试一下动态数组。我嫌麻烦,不想试了。

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小业努力不秃

原创代码不易,鼓励一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值