### IntegerSet解答

// File Name:   IntegerSet.h

// Assignment:   IntegerSet
// Description:  head of IntegerSet Class
#ifndef  INTEGERSET_H
#define  INTEGERSET_H
class IntegerSet{
public:
IntegerSet();
//default constructor;
IntegerSet(int* set,int size);
//constructor from an int array;
IntegerSet(const IntegerSet& ia);
//copy constructor;
//three ways to initialize the instance;

friend std::istream& operator>>(std::istream & cin,IntegerSet& ia);
friend std::ostream& operator<<(std::ostream & cout,IntegerSet& ia);
void printSet(std::ostream &ostr=std::cout );
//output the instance;

IntegerSet operator-(IntegerSet &subbedSet);
void unionOf(const IntegerSet &set1, const IntegerSet &set2 );
void intersectionOf( const IntegerSet &set1, const IntegerSet &set2 );
bool isEqualTo( const IntegerSet &set );

void insertElement( int num );
void deleteElement( int num );

bool isInSet( int num );

private:
bool integer[101];
};
/*std::ostream& operator<<(std::ostream& cout,IntegerSet& ia){
cout<<"{";
for(int index=0;index<=100;index++){
if(ia.integer[index]==true)
cout<<ia.integer[index]<<",";
}
cout<<"}";
return cout;

}*/

#endif

//IntegerSet.cpp
// Assignment:   IntegerSet
// Description:  detail  of IntegerSet Class
#include<iostream>
#include "IntegerSet.h"

IntegerSet::IntegerSet(){
//initialize the set having no integer

for(int index=0;index<=100;index++)
integer[index]=false;

}

IntegerSet::IntegerSet(const IntegerSet & ia){
//initialize the set using copy constructor
for(int index=0;index<=100;index++)
integer[index]=false;

for(index=0;index<=100;index++)
if(ia.integer[index]) this->integer[index]=true;
}

IntegerSet::IntegerSet(int* set,int size){
//initialize the set from a integer array

for(int index=0;index<=100;index++)
integer[index]=false;
for( index=0;index<size;index++)
integer[set[index]]=true;
}

void  IntegerSet::unionOf(const IntegerSet &set1, const IntegerSet &set2 ){
for(int index=0;index<=100;index++){
if(set1.integer[index]==true||set2.integer[index]==true)
this->integer[index]=true;
else
this->integer[index]=false;
}
}

void  IntegerSet::intersectionOf( const IntegerSet &set1, const IntegerSet &set2 ){
for(int index=0;index<=100;index++){
if(set1.integer[index]==true&&set2.integer[index]==true)
this->integer[index]=true;
else
this->integer[index]=false;
}
}

bool  IntegerSet::isEqualTo( const IntegerSet &set ){
int index;

for(index=0;index<=100;index++)
{
if(integer[index]!=set.integer[index])
return false;
}
return true;
}
void  IntegerSet::printSet( std::ostream &ostr ) {

ostr<<"{";
for(int index=0;index<=100;index++){
if(this->isInSet(index)) ostr<<index<<",";
}
ostr<<'/b';
ostr<<"}"<<std::endl;

}
void  IntegerSet::insertElement( int num ){
if(num<=100&&num>=0)

this->integer[num]=true;
}

void  IntegerSet::deleteElement( int num ){
if(num<=100&&num>=0)
this->integer[num]=false;
}

bool  IntegerSet::isInSet( int num ){
return this->integer[num];
}

IntegerSet temp;
for(int index=0;index<=100;index++){
temp.integer[index]=true;
else
temp.integer[index]=false;
}

return temp;
}
IntegerSet IntegerSet::operator-(IntegerSet &subbedSet){
IntegerSet temp;
for(int index=0;index<=100;index++){
if(this->integer[index]==true&&subbedSet.integer[index]==true)
temp.integer[index]=true;
else
temp.integer[index]=false;
}

return temp;
}

// File Name:   test.cpp

// Assignment:   IntegerSet
// Description:  test of IntegerSet Class

#include <iostream>
#include "IntegerSet.h"

using namespace std;
istream& operator >> (istream & cin, IntegerSet& ia);
ostream& operator << (ostream & cout, IntegerSet& ia);
//Integer Class's friend to cin and cout IntegerSet

int main(){

IntegerSet intset1,intset2,clear;
//three ways to initialize in fact
//use default constructor

char flag='y';
//flag to decide whether want quit

do{
intset1.intersectionOf(intset1,clear);
intset2.intersectionOf(intset2,clear);
cout << "Enter set1:";
cin  >> intset1;

cout << "Enter set2";
cin  >> intset2;

cout << "set1 is:" << intset1;
cout << "set2 is:";
intset2.printSet();
//two ways to output;

cout << "set1==set2:" << intset1.isEqualTo(intset2) << endl;

IntegerSet temp;
//temp instance to hold the output of intersection and union
//temp.intersectionOf(intset1,intset2);
cout << "Intersection of both sets is" << intset1-intset2;
//temp.unionOf(intset1,intset2);
cout << "Union of both sets is " << intset1+intset2;

int index;
char ch;
//temp variable for input
cout << "Enter numbers to remove from Set 1:";
do{
cin >> index;
ch=cin.get();
if( index<=100&&index>=0 )
intset1.deleteElement(index);
}while( ch!='/n' );
//use int and ' ' format to input
//take enter as finish sign

cout << "Enter numbers to insert into Set 2:";
do{
cin >> index;
ch=cin.get();
if( index<=100&&index>=0 )
intset2.insertElement(index);
}while( ch!='/n' );
//use int and ' ' format to input
//take enter as finish sign
cout << "set1 is:"<<intset1;
cout << "set2 is:" << intset2;

cout << "set1==set2:" << intset1.isEqualTo(intset2) << endl;

temp.intersectionOf(intset1,intset2);
cout << "Intersection of both sets is" << temp;
temp.unionOf(intset1,intset2);
cout << "Union of both sets is " << temp;

cout << "another try?y/n:";
flag=cin.get();
}while(flag!='n');
return 0;
}
ostream& operator << ( ostream & cout, IntegerSet& ia ){

cout << "{";
for( int index=0;index<=100;index++ ){
if( ia.integer[index]==true )
cout << index<< ',';
}
cout << '/b';
cout << "}" << endl;
return cout;
}
istream& operator >> ( istream & cin, IntegerSet& ia ){
int index;
char ch;
cout << "input:";
do{
cin >> index;
ch=cin.get();
if( index<=100&&index>=0 )
ia.insertElement(index);
}while( ch!='/n' );
return cin;
}

0 0