C++程序,求大神帮忙!!急求!!!最好在这几天回答!!!发邮箱也行!!450555211@qq.com
(1)增加一个整数到集合中;
(2)从集合中去掉一个元素;
(3)判断一个元素是否在集合中;
(4)重载<<运算法,输入集合;重载>>运算符输出集合;
(5)分别实现集合的交、并、差运算。 展开
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
class int_set
{
public:
int *val;
int cur_size ;
int max_size ;
public:
int_set(){
max_size = 0;
cur_size = 0;
val = NULL;
}
~int_set(){
if(val != NULL)
delete []val;
}
void add_num(int number)
{
if(cur_size>=max_size && check_num(number) > 0 ) //超出最大数量或已经存在
return;
val[cur_size++]=number;
}
void del_num(int number)
{
int p = check_num(number);
if( p == -1) //没找到
return ;
for(int i=p;i<cur_size-1;i++)
val[i] = val[i+1];
cur_size--;
}
int check_num(int number) //查找一个数,找到返回找到的序列值,反则返回-1
{
for(int i=0;i<cur_size;i++)
{
if(number == val[i])
return i;
}
return -1;
}
void setmaxsize(int maxsize)
{
if(maxsize<=0)
return;
if(val != NULL)
{
delete []val;
}
val = new int[maxsize];
max_size = maxsize;
cur_size = 0;
}
// int_set &operator<< (const int_set &a) //这个放在这儿也可以
// {
// this->setmaxsize(a.max_size);
// for(int i=0;i<a.cur_size;i++)
// this->add_num(a.val[i]);
// return *this;
// }
};
int_set &operator<< (int_set &B,const int_set &A)
{
B.setmaxsize(A.max_size);
for(int i=0;i<A.cur_size;i++)
B.add_num(A.val[i]);
return B;
}
ostream& operator>> (ostream& pout,const int_set &A){
pout<<"{";
for(int i=0;i<A.cur_size;i++)
{
if(i!=0)
pout<<",";
pout<<A.val[i];
}
pout<<"}";
return pout;
}
void intersection (const int_set &A,const int_set &B,int_set &C)
{
int i,j;
int_set CC;
CC.setmaxsize(A.cur_size+B.cur_size);
for(i=0;i<A.cur_size;i++)
{
for(j=0;j<B.cur_size;j++)
{
if(A.val[i] == B.val[j])
{
CC.add_num(A.val[i]);
break;
}
}
}
C.setmaxsize(CC.cur_size);
for(i=0;i<CC.cur_size;i++)
C.add_num(CC.val[i]);
}
void unions (const int_set &A,const int_set &B,int_set &C)
{
int i;
int_set CC;
CC.setmaxsize(A.cur_size+B.cur_size);
for(i=0;i<A.cur_size;i++)
CC.add_num(A.val[i]);
for(i=0;i<B.cur_size;i++)
CC.add_num(B.val[i]);
C.setmaxsize(CC.cur_size);
for(i=0;i<CC.cur_size;i++)
C.add_num(CC.val[i]);
}
void subtraction (const int_set &A, int_set &B,int_set &C)
{
int_set CC;
CC.setmaxsize(A.cur_size);
for(int i=0;i<A.cur_size;i++)
{
int val = A.val[i];
if( -1 == B.check_num(val) )// 如果B没有
CC.add_num(val);
}
C.setmaxsize(CC.cur_size);
for(i=0;i<CC.cur_size;i++)
C.add_num(CC.val[i]);
}
void main()
{
int i;
int_set A,B,C,D;
A.setmaxsize(10);
C.setmaxsize(20);
for(i=0;i<10;i++)
A.add_num(i);
for(i=0;i<20;i++)
C.add_num(i*2);
B<<A;
cout<<"A = ">>A<<endl;
cout<<"B = ">>B<<endl;
cout<<"C = ">>C<<endl;
intersection(A,C,D);
cout<<"A ∩ C = ">>D<<endl;
unions(A,C,D);
cout<<"A ∪ C = ">>D<<endl;
subtraction(A,C,D);
cout<<"A - C = ">>D<<endl;
cout<<"\nover\n";
}
有没有可以自己输入a和b集合的方法!!还有好像增加和删除一个元素没编。求继续帮忙,感激不尽!!!
增加一个元素? add_num()
删除一个元素 del_num()
你没有看见么?在类里面实现了。难道你不是要再类里面实现?
自己输入集合的方法?可以啊
我给你改下main()就可以了
void main()
{
int i;
int_set A,B,C,D;
int count ;
cout>count;
A.setmaxsize(count);
cout>count;
cout>x;
A.add_num(x);
}
cout>count;
B.setmaxsize(count);
cout>count;
cout>x;
B.add_num(x);
}
C>A>B>C>D>D>D<<endl;
}
没学过set,可以用iostream.h编一下吗?谢谢
C++是iostream 不是.h C才是.h . 我没时间写。 不过思路很简单 写一个类 类里面保存int数组 ~ 写一个push函数 ~ 增加一个数字到数组里面 。 remove函数删掉 。 find函数判断 。。其实很简单 。就在数组中找就是了。 只是把数组的内存管理需要用心 因为你不知道数组会有多大。。 重载的2个运算符更没难度 for循环输出一下就行了。。 只是 | & ~ 这3个运算符需要动一下脑筋~ 。。 比较一下 类里面的数组就是了。。