更新时间2021-04-02 01:49:13
#include<iostream>using namespace std;class MySet{ int s[10]; //整数集合 int size; //集合中有效元素的个数public: MySet( int num =0); void set(int a[],int s); bool add(int data); bool del(int date); MySet operator+(const MySet& M);//集合合并 MySet operator*(const MySet& M);// 交集 friend ostream& operator<<(ostream& out,const MySet& m);};MySet::MySet(int num){size=num;} void MySet::set(int a[],int s){int i;for(i=0;i<s&&i<10;i++)s[i]=a[i];size=s;}bool MySet::add(int data){int i;for(i=0;i<size;i++){if(data==s[i]){cout<<"增加数组元素失败"; return false; }}s[size]=data;size++;cout<<"添加数组元素后数组为:";cout<<s;return true;}bool MySet::del(int data){int i,sign,j,_sign=0;//_sign标记数组是否存在date for(i=0;i<size;i++){if(s[i]==data){_sign=1;sign=i;for(j=sign;j<size;j++,size--)s[j]=s[j+1]; }}if(_sign==1) {cout<<"删除元素成功"<<endl<<"删除元素后数组为:";cout<<s;}else{cout<<"删除元素失败"; return false;}}MySet MySet::operator+(const MySet&M){MySet m;int i,j,count=0;for(i=0;i<size;i++)m.s[i]=s[i];for(j=0;j<M.size;j++){for(i=0;i<size;i++){if(M.s[j]!=s[i]) count++;elsebreak;}if(count==M.size) {m.s[size]=M.s[j];m.size++; } } return m;}MySet MySet::operator*(const MySet& M){MySet m;int i, j,count=0,z=0;for(i=0;i<size;i++){for(j=0;j<M.size;j++){if(s[i]==m.s[j])count++;else break;}if(count==M.size){m.s[z]=s[i];z++; }}m.size=z;return m;}ostream& operator<<(ostream& out,const MySet& m){int i=0;for(i=0;i<m.size;i++)out<<m.s[i]<<" ";return out;}int main(){int a[3]={2,3,4},b[5]={3,4,5,6,7};MySet s1,s2,s3,s4;s1.set(a,3);s2.set(b,5);s3=s1+s2;cout<<s3;s4=s1*s2;cout<<s4;s1.add(5);s4.del(6);return 0;}
程序错的太多了,语法上
void MySet::set(int a[],int s) { int i; for(i=0;i<s&&i<10;i++) s[i]=a[i]; size=s; }
你的参数s与内部s混淆了,简单的改为
void MySet::set(int a[], int n) { int i; for(i = 0; i < n && i < 10; i++) s[i] = a[i]; size = n; }
而合并算法完全不对
for(i = 0; i < size; i++) m.s[i] = s[i];
赋值后,m.size根本没有设置,长度为0
而后面的合并也不对
并集没有看
你自己先检查算法(毕竟是自己设计的),有问题再追问