Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. #include <ctype.h>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. class Alpha
  6. {//класс множества латинских букв
  7. private:
  8. unsigned bin; //бинарный код подмножества латинских букв
  9.  
  10. public:
  11. Alpha() {bin=0;};
  12. Alpha(Alpha& y) {bin=y.bin;};
  13. Alpha(char*);
  14. Alpha operator *(Alpha&);
  15. Alpha operator ~();
  16. //operator char*();
  17. friend ostream& operator << (ostream&,Alpha&);
  18. };// Alpha
  19.  
  20. //конструктор множества букв по строке
  21. Alpha::Alpha(char* s){
  22. bin=0;
  23.  
  24. while(*s)
  25. {
  26. bin |= (1 << (tolower(*s)-'a'));
  27. s++;
  28. }
  29. }//Alpha
  30.  
  31. //оператор вычисления подмножеств букв
  32. Alpha Alpha:: operator*(Alpha& y)
  33. {
  34. Alpha z;
  35. z.bin=(bin & y.bin); //Поразрядная исключающая дизъюнкция
  36.  
  37. return(z);
  38. }//operator-
  39.  
  40. //оператор инвертирования подмножеств букв
  41. Alpha Alpha:: operator~()
  42. {
  43. Alpha z;
  44. z.bin= ~bin;
  45.  
  46. return(z);
  47. }//operator-
  48.  
  49. //оператор вывода подмножеств букв
  50. ostream& operator << (ostream& out,Alpha& z)
  51. {
  52. unsigned bit=1;
  53. int i;
  54.  
  55. for(i=0; i<26;i++)
  56. {
  57. if((z.bin& bit)>0)
  58. out<<(char)('a'+i);
  59. bit=bit<<1;
  60. }
  61.  
  62. return out;
  63. }// operator <<
  64.  
  65. /*//оператор преобразования множества в строку
  66. Alpha::operator char*()
  67. {
  68. static char s[32];
  69. unsigned b=bin;
  70. int i=0;
  71. int j=0;
  72. int w;
  73.  
  74. while(w>0)
  75. {
  76. if(w & 1)
  77. s[j++]='a'+i;
  78. i++;
  79. w>>1;
  80. }//while
  81. s[j]='\0';
  82.  
  83. return (s);
  84. }//operator char*()*/
  85.  
  86. //основная функция
  87. int main (int argc,char* argv[])
  88. {
  89.  
  90. Alpha x(argv[1]); //буквы 1-го аргумента
  91. Alpha y(argv[2]); //буквы 2-го аргумента
  92. Alpha z; //буквы результата
  93.  
  94. z=~(x*y); // вычитание и обращение подмножеств букв
  95.  
  96. cout<<z<<endl; // или cout<<(char*)z;
  97.  
  98. return (0);
  99. }//main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement