IntegerSet解答

来源:互联网 发布:网络泄密案例 编辑:程序博客网 时间:2024/04/30 05:54

// 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);
   //input overload
 friend std::ostream& operator<<(std::ostream & cout,IntegerSet& ia);
   //output overload
 void printSet(std::ostream &ostr=std::cout );
   //output the instance;

   IntegerSet operator+(IntegerSet &addedSet);
   //overload union
   IntegerSet operator-(IntegerSet &subbedSet);
   //overload intersection
 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 IntegerSet::operator+(IntegerSet &addedSet){
 IntegerSet temp;
 for(int index=0;index<=100;index++){
  if(this->integer[index]==true||addedSet.integer[index]==true)
   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
 //cin and cout overload

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;
}