Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ctype.h>
- #include <iostream>
- using namespace std;
- class Alpha
- {//класс множества латинских букв
- private:
- unsigned bin; //бинарный код подмножества латинских букв
- public:
- Alpha() {bin=0;};
- Alpha(Alpha& y) {bin=y.bin;};
- Alpha(char*);
- Alpha operator *(Alpha&);
- Alpha operator ~();
- //operator char*();
- friend ostream& operator << (ostream&,Alpha&);
- };// Alpha
- //конструктор множества букв по строке
- Alpha::Alpha(char* s){
- bin=0;
- while(*s)
- {
- bin |= (1 << (tolower(*s)-'a'));
- s++;
- }
- }//Alpha
- //оператор вычисления подмножеств букв
- Alpha Alpha:: operator*(Alpha& y)
- {
- Alpha z;
- z.bin=(bin & y.bin); //Поразрядная исключающая дизъюнкция
- return(z);
- }//operator-
- //оператор инвертирования подмножеств букв
- Alpha Alpha:: operator~()
- {
- Alpha z;
- z.bin= ~bin;
- return(z);
- }//operator-
- //оператор вывода подмножеств букв
- ostream& operator << (ostream& out,Alpha& z)
- {
- unsigned bit=1;
- int i;
- for(i=0; i<26;i++)
- {
- if((z.bin& bit)>0)
- out<<(char)('a'+i);
- bit=bit<<1;
- }
- return out;
- }// operator <<
- /*//оператор преобразования множества в строку
- Alpha::operator char*()
- {
- static char s[32];
- unsigned b=bin;
- int i=0;
- int j=0;
- int w;
- while(w>0)
- {
- if(w & 1)
- s[j++]='a'+i;
- i++;
- w>>1;
- }//while
- s[j]='\0';
- return (s);
- }//operator char*()*/
- //основная функция
- int main (int argc,char* argv[])
- {
- Alpha x(argv[1]); //буквы 1-го аргумента
- Alpha y(argv[2]); //буквы 2-го аргумента
- Alpha z; //буквы результата
- z=~(x*y); // вычитание и обращение подмножеств букв
- cout<<z<<endl; // или cout<<(char*)z;
- return (0);
- }//main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement