Advertisement
Filip_Markoski

CharSequence

May 19th, 2017
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. class Character {
  7. private:
  8.     char cha;
  9. public:
  10.     Character(char c = 0) { cha = c; }
  11.  
  12.     friend ostream &operator<<(ostream &out, const Character &c) {
  13.         out << c.cha;
  14.         return out;
  15.     }
  16.  
  17.     bool operator==(const Character &c) {
  18.         return cha == c.cha;
  19.     }
  20.  
  21.     Character toUpper() {
  22.         cha = toupper(cha);
  23.         return cha;
  24.     }
  25.  
  26.     Character toLower() {
  27.         cha = tolower(cha);
  28.         return cha;
  29.     }
  30.  
  31. };
  32.  
  33. class CharSequence {
  34. private:
  35.     Character *seq;
  36.     int len;
  37.  
  38. public:
  39.     CharSequence(const char *s = "") {
  40.         len = strlen(s);
  41.         seq = new Character[len + 1];
  42.         for (int i = 0; i < len; ++i) {
  43.             seq[i] = s[i];
  44.         }
  45.         seq[len] = Character('\0');
  46.     }
  47.  
  48.     ~CharSequence() { delete[] seq; }
  49.  
  50.     // Copy-Constructor
  51.     CharSequence(const CharSequence &cs) {
  52.         len = cs.len;
  53.         seq = new Character[len + 1];
  54.         for (int i = 0; i < len; ++i) {
  55.             seq[i] = cs.seq[i];
  56.         }
  57.         seq[len] = Character('\0');
  58.     }
  59.  
  60.     // Assignement Operator
  61.     CharSequence &operator=(const CharSequence &cs) {
  62.         if (this == &cs) return *this;
  63.         delete[] seq;
  64.         len = cs.len;
  65.         seq = new Character[len + 1];
  66.         for (int i = 0; i < len; ++i) {
  67.             seq[i] = cs.seq[i];
  68.         }
  69.         seq[len] = Character('\0');
  70.         return *this;
  71.     }
  72.  
  73.     CharSequence &operator+=(const Character &c) {
  74.         Character *old = seq;
  75.         seq = new Character[len + 1 + 1];
  76.         for (int i = 0; i < len; ++i) {
  77.             seq[i] = old[i];
  78.         }
  79.         seq[len++] = c;
  80.         seq[len] = Character('\0');
  81.         return *this;
  82.     };
  83.  
  84.     bool operator==(const CharSequence &cs) {
  85.         bool flag = true;
  86.         if (len != cs.len) return false;
  87.         for (int i = 0; i < len; ++i) {
  88.             if (!(seq[i] == cs.seq[i])) {
  89.                 flag = false;
  90.             }
  91.         }
  92.         return flag;
  93.     }
  94.  
  95.     Character &operator[](int i) {
  96.         return seq[i];
  97.     }
  98.  
  99.     friend ostream &operator<<(ostream &out, const CharSequence &str) {
  100.         for (int i = 0; i < str.len; ++i) {
  101.             out << str.seq[i];
  102.         }
  103.         return out;
  104.     }
  105.  
  106.     int operator[](char c) {
  107.         int count = 0;
  108.         for (int i = 0; i < len; ++i) {
  109.             if (seq[i] == c) {
  110.                 count++;
  111.             }
  112.         }
  113.         return count;
  114.     }
  115.  
  116.     CharSequence toUpperCase() {
  117.         CharSequence cs(*this);
  118.         for (int i = 0; i < len; ++i) {
  119.             cs.seq[i] = seq[i].toUpper();
  120.         }
  121.         return cs;
  122.     }
  123.  
  124.     CharSequence toLowerCase() {
  125.         CharSequence cs(*this);
  126.         for (int i = 0; i < len; ++i) {
  127.             cs.seq[i] = seq[i].toLower();
  128.         }
  129.         return cs;
  130.     }
  131. };
  132.  
  133.  
  134. int main() {
  135.     CharSequence cs;
  136.     cs += Character('a');
  137.     cout << cs;
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement