firedigger

Untitled

Oct 12th, 2015
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cstddef> // size_t
  3. #include <cstring> // strlen, strcpy
  4. #include <iostream>
  5.  
  6.  
  7. struct String {
  8.  
  9.     String(const char *str = "")
  10.     {
  11.         _size = strlen(str);
  12.         this->str = new char[_size + 1];
  13.         strcpy(this->str, str);
  14.     }
  15.  
  16.     String(size_t substr, const char *str = "") : String(str)
  17.     {
  18.         this->substr = substr;
  19.     }
  20.  
  21.     size_t size() const
  22.     {
  23.         return _size;
  24.     }
  25.  
  26.     String(const String &other)
  27.     {
  28.         str = new char[other.size() + 1];
  29.         strcpy(str, other.str);
  30.         _size = other.size();
  31.     }
  32.  
  33.     ~String()
  34.     {
  35.         delete[] str;
  36.     }
  37.  
  38.     void resize(size_t new_size)
  39.     {
  40.         str = resize_(str, new_size);
  41.     }
  42.  
  43.     String operator[](size_t i) const
  44.     {
  45.         if (substr == 0)
  46.             return String(i + 1, str + i);
  47.         String tmp = String(0, str);
  48.         tmp.resize(i - substr + 1);
  49.         return tmp;
  50.     }
  51.  
  52.     char at(size_t i) const
  53.     {
  54.         return str[i];
  55.     }
  56.  
  57. private:
  58.     char *resize_(const char *str, size_t new_size)
  59.     {
  60.         char * res = new char[new_size + 1];
  61.         char *p = res;
  62.         const char * q = str;
  63.         for (size_t i = 0; i < _size && i < new_size; ++i)
  64.         {
  65.             *p = *q;
  66.             p++;
  67.             q++;
  68.         }
  69.         res[new_size] = '\x0';
  70.         _size = new_size;
  71.         delete[] str;
  72.         return res;
  73.     }
  74.  
  75.     size_t _size;
  76.     char *str;
  77.     size_t substr = 0;
  78. };
  79.  
  80. int main()
  81. {
  82.     String s1 = String("hello");
  83.     String s2 = s1[0][4];
  84.  
  85.     std::cout << s2.size() << std::endl;
  86.  
  87.     for (size_t i = 0; i < s2.size(); i++)
  88.         std::cout << s2.at(i);
  89.     std::cout << std::endl;
  90.    
  91.     system("PAUSE");
  92.  
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment