home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_11_11 / saks / string.hpp < prev   
C/C++ Source or Header  |  1993-09-10  |  1KB  |  73 lines

  1. //
  2. // String class with overloaded cat function
  3. //
  4.  
  5. #include <iostream.h>
  6. #include <string.h>
  7.  
  8. class String
  9.     {
  10. public:
  11.     String(const char *);
  12.     String(const String &);
  13.     ~String()
  14.         { delete [] str; }
  15.     String &operator=(const String &);
  16.     String &operator+=(const String &);
  17.     size_t length()
  18.         { return len; }
  19.     operator const char *()
  20.         { return str; }
  21.     char &operator[](size_t i)
  22.         { return str[i]; }
  23.     // ...
  24. private:
  25.     size_t len;
  26.     char *str;
  27.     };
  28.  
  29. String::(const char *s)
  30.     {
  31.     len = strlen(s);
  32.     str = strcpy(new char[len + 1], s);
  33.     }
  34.  
  35. String::String(const String &s)
  36.     {
  37.     len = s.len;
  38.     str = strcpy(new char[len + 1], s.str);
  39.     }
  40.  
  41. String &String::operator=(const String &s)
  42.     {
  43.     if (len != s.len)
  44.         {
  45.         char *p = new char[s.len + 1];
  46.         strcpy(p, s.str);
  47.         delete [] str;
  48.         len = s.len;
  49.         str = p;
  50.         }
  51.     return *this;
  52.     }
  53.  
  54. String &String::operator+=(const String &s)
  55.     {
  56.     if (s.len > 0)
  57.         {
  58.         char *p = new char[len + s.len + 1];
  59.         strcat(strcpy(p, str), s.str);
  60.  
  61.         delete [] str;
  62.         len += s.len + 1;
  63.         str = p;
  64.         }
  65.     return *this;
  66.     }
  67.  
  68. String operator+(const String &s1, const String &s2)
  69.     {
  70.     String s = s1;
  71.     return s += s2;
  72.     }
  73.